`

设计模式之创建型之抽象工厂模式(Abstract Factory Pattern)

    博客分类:
  • java
阅读更多

 

                                               抽象工厂模式

一、什么是产品族?

是指位于不同产品等级结构中,功能相关联的产品组成的家族。这句话真的是太深奥了,网上查了下,那么你能解释什么叫产品族,可是我怎么知道什么是产品等级结构呢?网上没找到解释的,我看了一些源代码,自己理解的:动物又包括狗,猫等,狗又包括白狗,黑狗,猫有包括白猫,黑猫,那么我们可以将白猫和白狗放在一起,这就组成了一个白色动物的产品族!


二、什么是抽象工厂模式?

抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式提供多个具体工厂角色,分别对应于这多个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。例如产白猫(属于白色动物工厂角色)的就只产白猫。


三、工厂方法与抽象工厂方法:

工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。例如,工厂方法产动物就只管产动物,而抽象的则再多了一个等级,会产生不同颜色的动物,这个要是用工厂方法则会产生许多平行的等级结构


四、适用性,为什么要用抽象工厂模式:

1、当一个类不知道它所必须创建的对象的类的时候,

2、当一个类希望由它的子类来指定它所创建的对象的时候

那么知道1,2的时候,我们就应当选择工厂创建模型了

3、一个系统要由多个产品系列中的一个来配置时

4、处理具有相同(或者相似)等级结构的多个产品族中的产品对象的创建问题


五、示例角色和结构:


角色:

抽象产品角色:工厂方法模式所创建的对象的父类,或它们共同拥有的接口,本例中的,IDog,ICat。

具体产品角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例,本例中的BlackCat,BlackDog,White。。。等四个。

抽象工厂角色:工厂方法模式的核心,本例中的IAnimalFactory。

具体工厂角色:在客户端的调用下创建产品的实例,本例中的BlackAnimal,WhiteAnimal。


六、示例代码:

 

package AbstractFactoryPattern;
public interface ICat {
	public void eat();//猫吃的方法
}

public interface IDog {
	public void eat();
}

public class WhiteCat implements ICat{
	public void eat() {
		System.out.println("WhiteCat eat");		
	}
}

public class BlackCat implements ICat{
	public void eat() {
		System.out.println("BlackCat eat");
	}
}

public class BlackDog implements IDog{
	public void eat() {
		System.out.println("BlackDog eat");			
	}
}

public class WhiteDog implements IDog{
	public void eat() {
		System.out.println("WhiteDog eat");	
	}
}

public interface IAnimalFactory {
	public ICat createCat();
	public IDog createDog();
}

public class WhiteAnimal implements IAnimalFactory{
	public ICat createCat() {
		return new WhiteCat();
	}
	public IDog createDog() {
		return new WhiteDog();
	}
}

public class BlackAnimal implements IAnimalFactory{
	public ICat createCat() {
		return new BlackCat();
	}
	public IDog createDog() {
		return new BlackDog();
	}
}

public class Test {
	public static void main(String[] args) {
		IAnimalFactory biaf=new BlackAnimal();
		ICat bic=biaf.createCat();
		IDog bid=biaf.createDog();
		IAnimalFactory wiaf=new WhiteAnimal();
		ICat wic=wiaf.createCat();
		IDog wid=wiaf.createDog();
		bic.eat();
		bid.eat();
		wic.eat();
		wid.eat();
	}
}

白猫,黑猫都属于猫。白狗,黑狗都属于狗。而猫狗都属于动物,所以动物依赖于猫狗等。而白猫,白狗都是白色动物,所以白动物又依赖于白猫狗。当动物工厂生产的时候,直接成产所需要的白色或黑色的动物,而白色动物又可以直接产生白猫或白狗。

 

八、优缺点:

优点:

1、扩充了工厂方法模式,支持多个产品族的创建!

2、符合开闭原则是不用说的了。每次增加新的产品,只需添加新的产品族,具体产品类,添加相应的具体工厂类即可!

3、依赖倒置原则也不用说了,主要依赖我们的接口,不依赖具体的实现类!

缺点:

1、暴漏具体工厂(这个不大明白什么意思);

2、要和其他模式如单利模式一起使用效果才会比较好!

3、个人觉得,要写的类什么的太多了,容易记混,而且架构图不怎么好画,画出来了都看起来很复杂似得

  • 大小: 7.8 KB
分享到:
评论

相关推荐

    抽象工厂模式(Abstract Factory Pattern)

    在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂模式、工厂方法模式的意图、所能解决的问题及适用情景...

    [创建型模式] 设计模式之抽象工厂模式(Abstract Factory Pattern)

    NULL 博文链接:https://jacky-dai.iteye.com/blog/2294531

    设计模式 之 “抽象工厂模式[Abstract Factory Pattern]”

    NULL 博文链接:https://lym6520.iteye.com/blog/701742

    23种设计模式 (创建型,结构型,行为型)

    抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰...

    设计模式_抽象工厂模式.zip

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    创建型模式 (100%) 设计模式面面观(5):抽象工厂模式(AbstractFactory)-创建型模式 (100%) 设计模式面面观(6):生成器模式(Builder)-创建型模式 (100%) 设计模式面面观(7):原型模式(Prototype...

    用Java实现23种设计模式

    抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2. 结构型模式 适配器模式(Adapter Pattern) 桥接模式(Bridge ...

    C++设计模式(Design Pattern)范例源代码

    抽象工厂模式(Abstract Factory) 生成器模式(Builder) 工厂方法模式(Factory Method) 原型模式(Prototype) 单件模式(Singleton) 结构型: 适配器模式(Adapter) 桥接模式(Bridge) 组合模式(Composite) 装饰者模式...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、...

    33种JAVA设计模式DEMO

    抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口...

    设计模式PPT

     抽象工厂模式(Abstract Factory Pattern)  建造者模式(Builder Pattern)  原型模式(Prototype Pattern)  单例模式(Singleton Pattern) 结构型模式用来处理类或者对象的组合,主要包含以下7种设计...

    C#设计模式_设计模式_C#_

    抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator ...

    Python设计模式之抽象工厂模式原理与用法详解

    本文实例讲述了Python设计模式之抽象工厂模式原理与用法。分享给大家供大家参考,具体如下: 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的类 下面是一个...

    C#版 24种设计模式

    备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单例模式(Singleton Pattern) 迭代器模式(Iterator Pattern) 访问者模式(Visitor ...

    24种设计模式与6大设计原则

    抽象工厂模式[ABSTRACT FACTORY PATTERN] 门面模式[FACADE PATTERN] 适配器模式[ADAPTER PATTERN] 模板方法模式[TEMPLATE METHOD PATTERN] 建造者模式[BUILDER PATTERN] 策略模式 代理模式 单例模式 多例模式 工厂...

    abstract-factory-pattern

    今天,我要为大家介绍的是Java中的抽象工厂模式,这是一种非常实用的设计模式,让我们一起来探索它的魅力吧! 内容概要 本文将从以下几个方面详细介绍Java抽象工厂模式: 抽象工厂模式的应用场景。 抽象工厂模式...

    C#设计模式(23种设计模式)

    抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰...

    32种设计模式

    C# 32种设计模式: 创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) ...

    设计模式 design pattern

    3.1 Abstract Factory(抽象工厂)— 对象创建型模式 57 3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 ...

Global site tag (gtag.js) - Google Analytics