`

二十三:抽象工厂模式

阅读更多
一:什么是抽象工厂模式

抽象工厂是工厂模式中最为抽象和最具一般性的一种形态,它是面对多个产品等级结构的系统设计.假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构,那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开来,可以引进抽象工厂模式,这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品.抽象工厂模式涉及到以下的角色:
A:抽象工厂(AbstractFactory)角色:这个角色是工厂方法模式的核心,它是与应用系统的商业逻辑无关的,通常使用Java接口或者抽象类实现,而所有的具体工厂必须实现这个Java接口或继承这个抽象类.
B:具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例,这个角色含有选择合适产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的,通常使用具体类实现这个角色.
C:抽象产品(Abstract Product)角色:这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口,通常用接口或抽象类实现这个角色.
D:具体产品(Concrete Porduct)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例,这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑,通常使用具体类实现这个角色.

源代码: 
package cai.milenfan.basic.test; 

//抽象工厂角色
public interface Creator { 
//产品等级结构A的工厂方法
public ProductA factoryA(); 
//产品等级结构B的工厂方法
public ProductB factoryB(); 
} 


package cai.milenfan.basic.test; 

public class ConcreteCreator1 implements Creator{ 

public ProductA factoryA() { 
return new ProductA1(); 
} 
public ProductB factoryB() { 
return new ProductB1(); 
} 
} 



package cai.milenfan.basic.test; 

public class ConcreteCreator2 implements Creator{ 
public ProductA factoryA() { 
return new ProductA1(); 
} 
public ProductB factoryB() { 
return new ProductB1(); 
} 
} 



package cai.milenfan.basic.test; 

public interface ProductA { 
} 



package cai.milenfan.basic.test; 

public class ProductA1 implements ProductA{ 
} 


package cai.milenfan.basic.test; 

public class ProductA2 implements ProductA{ 
} 



package cai.milenfan.basic.test; 

public interface ProductB { 
} 


package cai.milenfan.basic.test; 

public class ProductB1 implements ProductB{ 
} 



package cai.milenfan.basic.test; 

public class ProductB2 implements ProductB{ 
} 



在上面的例子中有两个产品等级结构,而每个产品等级结构中又有两个产品,也就是有两个产品族,因此工厂等级结构中就会出现两个具体工厂(对应于两个产品族),而每个工厂类中又有两个工厂方法(对应于两个产品等级结构)

二:我们还是来看农场系统的例子:
假设农场系统中有两个等级结构:Fruit(水果)和Veggie(蔬菜),以及两个产品族:Tropical和Northern,于是便有四种产品,分别是TropicalFruit(热带水果),TropicalVeggie(热带蔬菜) ,NorthernFruit(北方水果)以及NorthernVeggie(北方蔬菜)

首先定义一个Gardener接口:
package cai.milenfan.basic.test; 

public interface Gardener { 
} 

NorthernGardener和TropicalGardener都是抽象工厂类Garderer的具体子类,也就是说它们全都是具体工厂类,源代码如下:

package cai.milenfan.basic.test; 

public class NorthernGardener implements Gardener{ 
//水果的工厂方法
public Fruit createFruit(String name){ 
return new NorthernFruit(name); 
} 
//蔬菜的工厂方法
public Viggie createViggie(String name){ 
return new NorthernViggie(); 
} 
} 


package cai.milenfan.basic.test; 

public class TropicalGardener { 
//水果的工厂方法
public Fruit createFruit(String name){ 
return new TropicalFruit(name); 
} 
//蔬菜的工厂方法
public Viggie createViggie(String name){ 
return new TropicalViggie(); 
} 
} 



package cai.milenfan.basic.test; 

public interface Viggie { 
} 



package cai.milenfan.basic.test; 

public class NorthernViggie implements Viggie{ 
private String name=""; 
public NorthernViggie(){ 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
} 



package cai.milenfan.basic.test; 

public class TropicalViggie implements Viggie{ 
private String name=""; 
public TropicalViggie(){} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
} 



package cai.milenfan.basic.test; 

public interface Fruit { 
} 

package cai.milenfan.basic.test; 

public class NorthernFruit implements Fruit{ 
private String name=""; 
public NorthernFruit(String name){} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
} 



package cai.milenfan.basic.test; 

public class TropicalFruit implements Fruit{ 
private String name=""; 
public TropicalFruit(String name){} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
} 


在使用时,客户端只需要创建具体工厂的实例,然后调用工厂对象的工厂方法,就可以得到所需要的产品对象。

三:此模式对"开-闭"原则的支持
"开-闭"原则要求一个软件系统可以在不修改原有代码的情况下,通过扩展达到增强其功能的目的,对于一个涉及到多个产品等级结构和多个产品族的系统,其功能的增强不外乎两个方面:
A:增加新的产品族
B:增加新的产品等级结构

四:相关的模式与模式的实现
具体工厂类可以设计成单例类,如农场系统中的NorthernGardener和TropicalGardener只要一个实例就可以了。
分享到:
评论

相关推荐

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...

    肯德基:抽象工厂模式

    抽象工厂模式是软件工程中常用的一种创建型设计模式,它的核心思想是为创建一组相关或相互依赖的对象提供一个接口,而不需要指定它们具体的类。在Java中,抽象工厂模式被广泛应用,它有助于整合代码,提高系统的可...

    第三讲:抽象工厂模式

    **抽象工厂模式** 抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。这种模式在软件工程中被广泛应用,尤其是在涉及跨平台开发或者需要构建复杂的对象组合时...

    (超详细,超易懂)设计模式(三):抽象工厂模式,灵山派系谁上位

    抽象工厂模式由以下几个角色组成: 抽象工厂(AbstractFactory):定义了一组创建产品的抽象方法。 具体工厂(ConcreteFactory):实现了抽象工厂定义的抽象方法,用于创建具体产品的实例。 抽象产品...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    深入理解Python设计模式:抽象工厂模式实践与应用

    深入理解Python设计模式:抽象工厂模式实践与应用

    Android之大话设计模式——:抽象工厂模式借鉴.pdf

    Android之大话设计模式——:抽象工厂模式借鉴.pdf

    Android之大话设计模式——:抽象工厂模式参考.pdf

    Android之大话设计模式——:抽象工厂模式参考.pdf

    Android之大话设计模式:抽象工厂模式终稿.pdf

    **抽象工厂模式**是软件设计模式中的一种创建型模式,主要用在需要创建一系列相关或相互依赖的对象,而无需指定它们具体的类时。这个模式的关键在于提供了一个接口,允许客户端在不关心产品具体实现的情况下创建多个...

    抽象工厂模式简单小例子

    #### 二、抽象工厂模式应用场景 在软件开发过程中,当需要创建一系列相关联的对象,并且希望这些对象之间保持一致性时,抽象工厂模式就能发挥其作用。例如,在构建大型系统时,可能会遇到需要根据不同环境(如操作...

    简单工厂模式、工厂模式、抽象工厂模式案例(C++实现)

    3. 抽象工厂模式: 抽象工厂模式是工厂方法模式的扩展,关注于创建相关或依赖对象的家族,而不必指定它们的具体类。在C++中,抽象工厂通常定义一个接口,包含多个用于创建相关产品对象的方法。具体的工厂类实现这个...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

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

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

    抽象工厂模式uml类图

    java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式

    设计模式 - 抽象工厂模式

    设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...

    抽象工厂模式+反射技术(抽象工厂模式+简单工厂模式)

    抽象工厂模式是设计模式中的一种,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在软件工程中,当系统需要在运行时选择不同的产品族时,或者想要隔离具体产品的实现细节时,抽象工厂...

    工厂方法模式和抽象工厂模式

    在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...

    Java工厂模式:简单工厂、工厂方法模式、抽象工厂模式代码示例

    在Java中,工厂模式分为三种:简单工厂、工厂方法模式和抽象工厂模式。 **简单工厂模式** 是最基本的工厂模式,它由一个工厂类根据传入的参数决定创建哪一种产品类的实例。简单工厂容易实现,但违反开闭原则,即...

    Android抽象工厂模式demo

    抽象工厂模式是设计模式中的一种结构型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在Android开发中,这种模式尤其有用,因为Android平台有多种设备,每种设备可能有不同的UI...

Global site tag (gtag.js) - Google Analytics