设计模式 - 浅谈抽象工厂模式

抽象工厂模式

模式功能说明:是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体实现类。抽象工厂模式通过定义一个抽象工厂接口,该接口声明了一系列用于创建不同类型对象的方法,具体的工厂类实现了这些方法来创建具体的对象。

模式思路与原理

在抽象工厂模式中,有四个主要角色:

抽象产品接口(Product Interface):定义了产品对象的共同接口。
具体产品类(Concrete Product Class):实现了产品接口,是被创建的对象。
抽象工厂接口(Abstract Factory Interface):定义了一系列用于创建产品对象的方法。
具体工厂类(Concrete Factory Class):实现了抽象工厂接口,负责创建具体的产品对象。

示例

// 抽象产品接口
interface Product {
    void operation();
}

// 具体产品类A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("Concrete Product A");
    }
}

// 具体产品类B
class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("Concrete Product B");
    }
}

// 抽象工厂接口
interface AbstractFactory {
    Product createProduct();
}

// 具体工厂类A
class ConcreteFactoryA implements AbstractFactory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体工厂类B
class ConcreteFactoryB implements AbstractFactory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        AbstractFactory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.operation();  // 输出:Concrete Product A

        AbstractFactory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.operation();  // 输出:Concrete Product B
    }
}
通过使用抽象工厂模式,客户端只需要使用具体的工厂类来创建产品对象,而无需关心具体的产品创建逻辑。每个具体工厂类负责创建特定类型的产品对象,从而实现了开闭原则,使得系统更加灵活和可扩展。同时,抽象工厂模式还能够确保一系列相关的产品对象能够协同工作,保持一致性。

总结一下三种工厂模式

  1. 简单工厂模式就是建立一个实例化对象的类,在该类中对多个对象实例化。
  2. 工厂方法模式是定义了一个创建对象的抽象方法,由子类决定要实例化的类。这样做的好处是再有新的类型的对象需要实例化只要增加子类即可。
  3. 抽象工厂模式定义了一个接口用于创建对象族,而无需明确指定具体类。抽象工厂也是把对象的实例化交给了子类,即支持拓展。同时提供给客户端接口,避免了用户直接操作子类工厂。

本文链接:

https://pugqq.com/archives/abstract-factory-pattern.html
设计模式 - 浅谈抽象工厂模式 - I/O
4 评论
    dyrerredcpSogo BrowserWindows 10
    11月29日 回复

    你的文章内容非常精彩,让人回味无穷。 http://www.55baobei.com/gzxhxLK77z.html

    hbbrpbsqpoSogo BrowserWindows 10
    11月28日 回复

    你的才华让人惊叹,你是我的榜样。 http://www.55baobei.com/Ru1dYhZKmL.html

    nbxeuwymvaSogo BrowserWindows 10
    11月25日 回复

    你的才华让人惊叹,你是我的榜样。 http://www.55baobei.com/LTpI0F4B3O.html

    小熊Chrome 131Windows 10
    11月24日 回复

    123

# 最近更新

Nginx的proxy_pass指令完全拆解2021-03-21

Nginx配置Jenkins域名访问2021-01-03

设计模式 - 浅谈备忘录模式2020-12-02

设计模式 - 浅谈中介者模式2020-11-23

设计模式 - 浅谈迭代器模式2020-11-02

MySQL5.7 字符集设置2020-10-26

设计模式 - 浅谈状态模式2020-10-23

设计模式 - 浅谈访问者模式2020-10-13

设计模式 - 浅谈观察者模式2020-10-12

设计模式 - 浅谈命令模式2020-09-21