Java设计模式——抽象工厂模式(Abstract factory)

抽象工厂模式可以向客户提供接口,使得客户端在不必指定产品具体类型的情况下创建多个产品族中的产品对象。

系统的设计

采用抽象工厂模式设计出的系统类图如下:

从上图可以看出,抽象工厂模式涉及到角色:

抽象工厂角色(AbstractFactory):担任这个角色的是工厂方法模式的核心,它与应用系统的商业逻辑无关。通常使用Java接口或者抽象Java类实现,而所有的具体工厂类都必须实现这个Java接口或者继承这个抽象Java类。

具体工厂类(ConcreteFactory)角色:这个角色直接在客户端的调用下创建产品实例。这个角色包含有选择合适的产品对象的逻辑,而这个逻辑与应用系统的商业逻辑紧密相关的。通常使用具体Java类实现这个角色。

抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或他们共同拥有的接口。通常使用Java接口或者抽象Java类实现这一角色。

具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。通常使用具体Java类实现这个角色。

工厂角色源代码
public interface Creater {

    /**
     * 产品等级A的工厂方法
     * @author 付玉伟
     * @time 2015-3-21 下午05:03:14
     * @return
     */
    public ProductA factoryA();
    /**
     * 产品等级B的工厂方法
     * @author 付玉伟
     * @time 2015-3-21 下午05:03:31
     * @return
     */
    public ProductB factoryB();
}

具体的工厂角色(一般而言,有多少个产品等级结构,就会在工厂角色中发现多个个工厂方法,每一个产品等级结构中有多少个具体的产品,就有多少个产品族,也就会在工厂等级结构发现多少个具体的工厂)

public class ConcreteCreator1 implements Creater {

    public ProductA factoryA() {
        return new ProductA1();
    }

    public ProductB factoryB() {
        return new ProductB1();
    }

}

public class ConcreteCreatro2 implements Creater {

    public ProductA factoryA() {
        return new ProductA1();
    }

    public ProductB factoryB() {
        return new ProductB1();
    }

}

public interface ProductA {

}

public interface ProductB {

}

public class ProductA1 implements ProductA {
    public ProductA1(){

    }
}
public class ProductA2 implements ProductA {

    public ProductA2(){

    }
}
public class ProductB1 implements ProductB {

    public ProductB1(){

    }
}

public class ProductB2 implements ProductB {

    public ProductB2(){

    }
}

客户端需要的不是工厂,而是具体的产品。在真实的系统中,产品类应当与应用系统的商业逻辑有密切的关系。

在什么情况下使用抽象工厂模式?

1、一个系统不应单依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。

2、这个系统的产品有多于一个的产品族,而系统中只消费其中某一族的产品

3、同属于同一个产品族的产品是在一起使用的,这一约束必须在系统设计中体现出来

4、系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现

时间: 2024-10-05 13:46:08

Java设计模式——抽象工厂模式(Abstract factory)的相关文章

设计模式 - 抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 参考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类. 全部代码: http://download.csdn.net/de

设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 參考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不须要明白指定详细类. 所有代码: http://download.csdn.net/

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

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import

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

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 <?php 2 /* 3 * php设计模式——抽象工厂模式(Abstract Factory) 4 */ 5 6 7 /* 8 * I

Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)

抽象工厂模式 理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处.抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品. 抽象工厂提供一个创建一系列相关或相互依赖对象接口,而无需制定它们具体的类. 抽象工厂与工厂方法 抽象工厂 通过对象组合创建抽象产品 创建多系列产品 必须修改父类的接口才能支持新的产品 工厂方法 通过类继承创建抽象产品 创建一种产品 子泪花创建者并重载工厂方法以创建新产品 Demo 比较多就不一一的贴代码了,截类图 客

【设计模式】 抽象工厂模式 Abstract Factory Pattern

简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式相对于简单工厂和工厂方法模式来着更具抽象性. 一.抽象工厂模式演绎 我们先来看一个简单的需求: 甲方要开发一套办公自动化软件,其中有一个非常重要的功能就是要能够导入Word 文档和Excel 文档. 开发人员拿到需求后就开始编码了,  很快代码写完了: public class ImportTool

二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Message有一个Insert()方法,该方法的参数是MessageModel. AbstractMessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Abstract

Java设计模式之工厂模式(Factory模式)介绍(转载)

原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工厂.Java工厂模式举例等内容,需要的朋友可以参考下 工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经

抽象工厂模式(Abstract Factory)C#实例

抽象工厂模式(Abstract Factory)C#实例 本文出处http://www.dofactory.com/net/abstract-factory-design-pattern 一.场景描述 本实例描述了抽象工厂模式的一个使用场景.在动物世界弱肉强食,食肉动物会吃掉食草动物.这是动物世界的规律,因此在动物世界类中有Runfoodchain(运行食物链)方法.在动物世界里总是有食肉动物和食草动物这两个抽象成员.它们之所以是抽象成员是因为他们不是具体的一种动物.而食草动物与食肉动物的区别在

JAVA 设计模式 抽象工厂模式

用途 抽象工厂模式 (Abstract Factory) 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式是一种创建型模式. 结构 图-抽象工厂模式结构图 AbstractProduct : 声明一个接口,这个接口中包含产品对象类型. abstract class AbstractProductA {     public abstract void show(); } abstract class AbstractProductB {     public a