`

设计模式之创建型之抽象工厂模式(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)

    抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...

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

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...

    创建型-抽象工厂模式(Abstract Factory)

    抽象工厂模式是设计模式中的一种,它属于对象创建型模式,主要解决的是当系统需要创建一组相关或相互依赖的对象时,而这些对象的类在运行时可能未知的问题。这种模式提供了一个接口,用于创建相关或依赖对象的家族,...

    通过python实现抽象工厂模式(Abstract Factory Pattern).rar

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建一系列相关或相互依赖对象的接口。这个模式使得客户端代码与具体产品的实现解耦,从而提高了系统的灵活性和...

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

    **抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...

    抽象工厂模式(Abstract Factory Pattern)

    ### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...

    李建忠 C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

    **抽象工厂模式(Abstract Factory Pattern)是创建型设计模式之一,它提供了一种创建对象的接口,使得子类可以决定实例化哪一个类。这种类型的设计模式属于类的创建模式。** 在C#中,抽象工厂模式的核心在于抽象...

    抽象工厂模式abstractFactory

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...

    C#设计模式之抽象工厂(abstract factory)模式示例源代码

    抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的一种,它提供了一个接口用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的类。该模式的核心在于提供一个高层接口来创建一组相关的产品对象。...

    通过java实现抽象工厂模式(Abstract Factory Pattern).rar

    在Java中,抽象工厂模式(Abstract Factory Pattern)同样是一种创建型设计模式,它允许在不指定具体类的情况下创建一系列相关或相互依赖的对象。压缩包文件代码是一个简单的Java实现示例,展示了如何使用抽象工厂...

    设计模式之抽象工厂模式-c++

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。这种模式常用于需要跨多个产品系列进行实例化的场景。 抽象工厂模式的...

    创建型模式之工厂方法模式(Factory Method Pattern)

    工厂方法模式是面向对象设计模式中的一个核心模式,属于创建型模式。它的主要目的是通过引入一个工厂接口,将具体的对象创建过程封装起来,使得客户端在使用时无须关心产品类的确切实现,只需要通过工厂来获取所需的...

    java常用设计模式-抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式...

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

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

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

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

    Abstract Factory Pattern.docx

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的主要目的是为了隔离产品对象的创建过程,使得更换产品族或者...

    Java设计模式之创建型模式的几个小DEMO

    创建型模式是设计模式的一种分类,主要关注对象的创建过程,旨在抽象和隔离实例化过程,提高代码的灵活性和可复用性。本篇文章将详细探讨Java中的几种创建型设计模式,并通过具体的DEMO来阐述它们的应用。 1. 单例...

    Head First 设计模式 (四) 工厂模式(factory pattern) C++实现

    工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它只需要一个具体工厂类的引用,而不需要知道如何构造这些对象的细节。这种模式的核心在于封装了...

Global site tag (gtag.js) - Google Analytics