1. 定义
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2. 结构图
AbstractFactory:抽象工厂,定义创建一系列产品对象的操作接口。
ConcreteFactory:具体的工厂,实现抽象工厂定义的方法,具体实现一系列产品对象的创建。
AbstractProduct:定义一类产品对象的接口。
ConcreteProduct:具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,来创建符合抽象工厂定义的方法返回的产品类型的对象。
Client:客户端,主要使用抽象工厂来获取一系列所需要的产品对象,然后面向这些产品对象的接口编程,以实现需要的功能。
3. 本质
抽象工厂模式的本质是:选择产品簇的实现。
4. Code Demo
AbstractProductA.java
package org.fool.pattern.abstractfactory; /** * 抽象产品A的接口 */ public interface AbstractProductA { // 定义抽象产品A相关的操作 }
AbstractProductB.java
package org.fool.pattern.abstractfactory; /** * 抽象产品B的接口 */ public interface AbstractProductB { // 定义抽象产品B相关的操作 }
AbstractFactory.java
package org.fool.pattern.abstractfactory; /** * 抽象工厂的接口,声明创建抽象产品对象的操作 */ public interface AbstractFactory { /** * 示例方法,创建抽象产品A的对象 * * @return 抽象产品A的对象 */ public AbstractProductA createProductA(); /** * 示例方法,创建抽象产品B的对象 * * @return 抽象产品B的对象 */ public AbstractProductB createProductB(); }
ProductA1.java
package org.fool.pattern.abstractfactory; /** * 产品A的具体实现 */ public class ProductA1 implements AbstractProductA { // 实现产品A的接口中定义的操作 public ProductA1() { System.out.println("ProductA1 Created"); } }
ProductA2.java
package org.fool.pattern.abstractfactory; /** * 产品A的具体实现 */ public class ProductA2 implements AbstractProductA { // 实现产品A的接口中定义的操作 public ProductA2() { System.out.println("ProductA2 Created"); } }
ProductB1.java
package org.fool.pattern.abstractfactory; /** * 产品B的具体实现 */ public class ProductB1 implements AbstractProductB { // 实现产品B的接口中定义的操作 public ProductB1() { System.out.println("ProductB1 Created"); } }
ProductB2.java
package org.fool.pattern.abstractfactory; /** * 产品B的具体实现 */ public class ProductB2 implements AbstractProductB { // 实现产品B的接口中定义的操作 public ProductB2() { System.out.println("ProductB2 Created"); } }
ConcreteFactory1.java
package org.fool.pattern.abstractfactory; /** * 具体的工厂实现对象,实现创建具体的产品对象的操作 */ public class ConcreteFactory1 implements AbstractFactory { public AbstractProductA createProductA() { return new ProductA1(); } public AbstractProductB createProductB() { return new ProductB1(); } }
ConcreteFactory2.java
package org.fool.pattern.abstractfactory; /** * 具体的工厂实现对象,实现创建具体的产品对象的操作 */ public class ConcreteFactory2 implements AbstractFactory { public AbstractProductA createProductA() { return new ProductA2(); } public AbstractProductB createProductB() { return new ProductB2(); } }
Client.java
package org.fool.pattern.abstractfactory; public class Client { public static void main(String[] args) { // 创建抽象工厂对象 AbstractFactory factory = new ConcreteFactory1(); // 通过抽象工厂来获取一系列的对象,如产品A和产品B factory.createProductA(); factory.createProductB(); factory = new ConcreteFactory2(); factory.createProductA(); factory.createProductB(); } }
相关推荐
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1032977
博客 走进设计模式之抽象工厂(Abstract Factory) 对应代码
C#设计模式之抽象工厂(abstract factory)模式示例源代码
设计模式抽象工厂模式(AbstractFactory)源代码
3、抽象工厂模式(Abstract Factory Pattern) 用意:一个工厂生产一系列产品
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
设计模式C++学习之抽象工厂模式(AbstractFactory)
java之 抽象工厂模式(abstract factory) 之水果类和蔬菜类 (香蕉、梨、黄瓜、大蒜),北方市场,南方市场。。
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),...这就是我们要说的抽象工厂模式。
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
设计模式,AbstractFactory,抽象工厂模式
NULL 博文链接:https://conkeyn.iteye.com/blog/1245113
NULL 博文链接:https://zhouhaitao.iteye.com/blog/1003684
生产餐具和相应食物的工厂,有两个车间,其中一个车间用以生产餐具,一个车间用以生产相应的食物。 每个具体工厂生产出来的具体产品根据不同工厂的不同各不相同,但是客户使用产品的方法是一致的。比如客户在得到...
抽象工厂模式可以实现不同数据库之间的无缝移植。 该项目是在三层架构的基础上改进的。希望对初学者有帮助。
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、...
还是一个很简单的例子 博文链接:https://schnauzer.iteye.com/blog/111891
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) 体验课程