码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式(三)抽象工厂模式(AbstractFactory)-创建型

时间:2015-04-25 15:14:48      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:设计模式   工厂模式   抽象工厂模式   

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。

抽象工厂模式与工厂方法模式的区别

        抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。

        在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。我们依然拿生产汽车的例子来说明他们之间的区别。

技术分享技术分享

抽象工厂模式的实现原理

实现:

在工厂方法上增加一个语义功能

Translate.java

package com.devin.simplefactory; 
/** 
 * @author 作者 E-mail: csu.ldw@csu.edu.cn
 * @version 创建时间:2015年4月24日 下午12:38:57 
 * 类说明 
 */
public interface Translate {
	public String sayTxt(String text);
}

ChineseTranslate.java

package com.devin.simplefactory; 
/** 
 * @author 作者 E-mail: csu.ldw@csu.edu.cn
 * @version 创建时间:2015年4月25日 下午12:28:45 
 * 类说明 
 */
public class ChineseTranslate implements Translate {

	@Override
	public String sayTxt(String txt) {
		return "你好" + txt;
	}

}

EnglishTranslate.java

package com.devin.simplefactory; 
/** 
 * @author 作者 E-mail: csu.ldw@csu.edu.cn
 * @version 创建时间:2015年4月24日 下午1:18:24 
 * 类说明 
 */
public class EnglishTranslate implements Translate {

	@Override
	public String sayTxt(String txt) {
		return "hello" + txt;
	}

}

Interpret.java

package com.devin.abstractfactory; 
/** 
 * @author 作者 E-mail: 
 * @version 创建时间:2015年4月24日 下午1:31:45 
 * 类说明 
 */
public interface Interpret {
	public String doInterpret(String text);
}

ChineseInterpret.java

package com.devin.abstractfactory; 
/** 
 * @author 作者 E-mail: 
 * @version 创建时间:2015年4月24日 下午1:18:24 
 * 类说明 
 */
public class ChineseInterpret implements Interpret{

	@Override
	public String doInterpret(String txt) {
		return "中文语义" + txt;
	}

}

EnglishInterpret.java

package com.devin.abstractfactory; 
/** 
 * @author 作者 E-mail: 
 * @version 创建时间:2015年4月24日 下午1:18:24 
 * 类说明 
 */
public class EnglishInterpret implements Interpret{

	@Override
	public String doInterpret(String txt) {
		return "English interpret:" + txt;
	}
}

AbstractFactoryMethod.java

package com.devin.abstractfactory; 
/** 
 * @author 作者 E-mail: 
 * @version 创建时间:2015年4月24日 下午1:35:34 
 * 类说明 
 */
public abstract class AbstractFactoryMethod {
	protected abstract Translate factoryMethodTranslate();
	protected abstract Interpret factoryMethodInterpret();

	public String sayTxt(String txt){
		Translate translate = factoryMethodTranslate();
		Interpret interpret = factoryMethodInterpret();
		return translate.sayTxt(txt) + "---" + interpret.doInterpret(txt);
	}
}

ChineseFactoryMethod.java

package com.devin.abstractfactory; 
/** 
 * @author 作者 E-mail: 
 * @version 创建时间:2015年4月24日 下午1:27:45 
 * 类说明 
 */
public class ChineseFactoryMethod extends AbstractFactoryMethod{

	@Override
	protected Translate factoryMethodTranslate() {
		return new ChineseTranslate();
	}

	@Override
	protected Interpret factoryMethodInterpret() {
		// TODO Auto-generated method stub
		return new ChineseInterpret();
	}
}

EnglishFactoryMethod.java

package com.devin.abstractfactory; 
/** 
 * @author 作者 E-mail: 
 * @version 创建时间:2015年4月24日 下午1:27:45 
 * 类说明 
 */
public class EnglishFactoryMethod extends AbstractFactoryMethod{

	@Override
	protected Translate factoryMethodTranslate() {
		return new EnglishTranslate();
	}

	@Override
	protected Interpret factoryMethodInterpret() {
		return new EnglishInterpret();
	}

}

Client.java

package com.devin.abstractfactory; 
/** 
 * @author 作者 E-mail: 
 * @version 创建时间:2015年4月24日 下午1:28:57 
 * 类说明 
 */
public class Client {
	public static void main(String[] args) {
		AbstractFactoryMethod  factoryMethod=  new ChineseFactoryMethod();
		System.out.println(factoryMethod.sayTxt("ddddfdsafs"));
	}
}


测试结果:

helloddddfdsafs---中文语义ddddfdsafs


设计模式(三)抽象工厂模式(AbstractFactory)-创建型

标签:设计模式   工厂模式   抽象工厂模式   

原文地址:http://blog.csdn.net/dream_angel_z/article/details/45269713

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!