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

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

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

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

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

抽象工厂模式的实现原理

实现:

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

Translate.java

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

ChineseTranslate.java

package com.devin.simplefactory;
/**
 * @author 作者 E-mail: [email protected]
 * @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: [email protected]
 * @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
时间: 2024-10-16 23:54:05

设计模式(三)抽象工厂模式(AbstractFactory)-创建型的相关文章

设计模式三—抽象工厂模式

设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是园丁2的杰作 1.Fruit.java public interface Fruit { /* * 生长 * 收获 * 栽种 */ public void grow(); public void harvest(); public void plant(); } 2.Apple.java publi

C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】

原文:C#设计模式之三抽象工厂模式(AbstractFactory)[创建型] 一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简单工厂]模式所面对的问题,它的问题就是:如果我们增加新的产品,工厂类的方法就要修改本身的代码,增加产品越多,其逻辑越复杂,同时这样的修改也是不符合[开放关闭原则OCP],对修改代码关闭,对增加代码开放.为了解决[简单工厂

设计模式--工厂模式(创建型)

工厂模式属于创建型模式,分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 一.简单工厂模式 在工厂中做判断,根据产品类型从而创造相应的产品,当增加新产品时需要修改工厂类. 例如: enum CTYPE {COREA, COREB}; class SingleCore { public: virtual void Show() = 0; }; //单核A class SingleCoreA: public SingleCore { public: void Show() { cout<<&q

设计模式(一)工厂模式(创建型)

简单工厂模式 一个抽象产品类,可以派生出多个具体产品类: 一个具体工厂类,可以创建多个具体产品的实例. 抽象产品类定义 public abstract class Sender { void send(){ }; } 具体产品类定义 邮件产品类 public class MailSender extends Sender{ public void send(){ System.out.println("Mail Sender!"); } } 短信产品类 public class Sms

设计模式之抽象工厂模式20170803

创建型设计模式之抽象工厂模式: 一.含义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类. 具体来说, 为一组具有相同约束(属性)的对象,提供一个接口,这个接口下有不同的实现,每个实现类对应一种类型的约束(一种具体的属性),同时提供该类型的约束(属性)下所有对象的创建方法 二.代码说明 1.主要有两个角色 1)一组互相影响的产品线(对象),也叫做产品族 2)抽象工厂类及其实现类 抽象工厂类:在N个产品族中,在抽象工厂类中就应该有N个创建方法 实现类:具体实现类是产品族的具体

大话设计模式_抽象工厂模式(Java代码)

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类. 简单描述:有多种抽象产品,并且每种抽象产品都有多个具体产品.一个抽象工厂,提供多个具体工厂,每个工厂则提供不同种类的具体产品. 大话设计模式中的截图: 例子代码: AbstractProductA类: 1 package com.longsheng.abstractfactory; 2 3 public abstract class AbstractProductA { 4 5 public abstract v

设计模式之抽象工厂模式(Abstract Factory)

1.定义 抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.类图 由于类太多就不上源码了~ 最佳实践: 在一个应用中,需要在三个不同平台(Windows.Linux.Android)上运行,通过抽象工厂模式屏蔽掉操作系统对应的影响三个不同操作系统上的软件功能.应用逻辑.UI都应该是非常类似的,唯一不同的是调用不同的工厂方法,由不同的产品类去处理与操作系统交互的信息. 设计模式之抽象工厂模式(Abstract Factory)

设计模式之抽象工厂模式

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 最大的好处便是易于交换产品系列,由于具体工厂类,在一个应用中只需在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需改变具体工厂即可使用不同的产品配置. 他使具体创建实例的过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离. 下面的代码还使用了反射与XML. 代码如下: using System; using System.Collections.Ge

Design Patterns 4 酒干倘卖无---抽象工厂模式AbstractFactory

抽象工厂模式AbstractFactory 抽象工厂模式:提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类. 抽象工厂对于系列产品的变化支持 “开放——封闭”原则(指的是要求系统对扩展开放,对修改封闭),扩展起来非常简便,但对于添加新产品这种情况就不支持”开放——封闭 “原则. Design Patterns 4 酒干倘卖无---抽象工厂模式AbstractFactory,布布扣,bubuko.com