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(); } }
相关推荐
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...
1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...
抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建一系列相关或相互依赖对象的接口。这个模式使得客户端代码与具体产品的实现解耦,从而提高了系统的灵活性和...
抽象工厂模式可以帮助我们创建一个工厂接口,该接口声明了创建这些组件的方法,然后为每种操作系统实现一个具体的工厂类。 ```java // 抽象工厂接口 public interface GUIFactory { Button createButton(); ...
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
在软件工程中,抽象工厂模式经常用于框架和库的开发,它可以用来封装一系列相关或相互依赖的对象的创建,使得客户端代码可以在不关心具体实现的情况下使用这些对象。这样,当需要更换不同的产品族时,只需要替换对应...
此外,抽象工厂模式还可以与其他设计模式结合使用,比如工厂方法模式(Factory Method Pattern),在某些情况下,可以将抽象工厂模式的抽象工厂类设计为工厂方法模式,让子类决定实例化哪一个类。同时,抽象工厂模式...
设计模式抽象工厂模式(AbstractFactory)源代码
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在Java编程中,这种模式通常用于隔离客户端与具体实现之间的耦合,使得系统可以在不修改代码...
抽象工厂模式是设计模式中的一种结构型模式,它在C++编程中有着广泛的应用。这个模式主要用于创建一系列相关的对象,而无需指定它们的具体类。在本文中,我们将深入探讨抽象工厂模式的概念、工作原理以及在C++中的...
在C#中实现抽象工厂模式(Abstract Factory Pattern)涉及定义一个抽象工厂接口,该接口声明用于创建抽象产品的方法。然后,为每个具体产品族实现一个具体工厂,这些工厂提供创建具体产品的实现。最后,客户端代码...
抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的一种,它提供了一个接口用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的类。该模式的核心在于提供一个高层接口来创建一组相关的产品对象。...
这个压缩包“C# 抽象工厂 AbstractFactory.rar”可能包含了一个关于如何在C#中实现抽象工厂模式的实例或教程。 抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方式,而无需指定具体类。在C#中,这种...
在给定的压缩包文件中,"AbstractFactory"可能包含了一些示例代码或者实现,用来解释抽象工厂模式的具体应用。这些代码可能包括抽象工厂接口、具体工厂类以及抽象产品和具体产品的定义。通过查看这些代码,我们可以...
抽象工厂模式是设计模式中的一种结构型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。在Java中,这种模式常用于当系统需要根据不同的平台或环境创建不同类型的对象时,例如这里的“北方市场”和“南方...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...
**抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...
首先,我们来详细解释抽象工厂模式的基本概念。抽象工厂模式包含四个主要角色: 1. **抽象工厂(Abstract Factory)**:这是接口或者抽象类,定义了创建一系列相关或相互依赖对象的接口,而不涉及它们具体的类。 2. ...