抽象工厂模式-Abstract Factory

名称:

 

抽象工厂模式(Abstract Factory Pattern)-对象创建型模式

 

问题:

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。

 

适用性:

     在以下情况下可以使用Abstract Factory模式

    -一个系统要独立于它的产品的创建、组合和表示时。

    -一个系统要由多个产品系列中的一个来配置时。

    -当你要强调一系列相关的产品对象的设计以便进行联合使用时。

    -当你提供一个产品类库,而只想显示它们的接口而不是实现时。

 

协作:

    -通常在运行时刻创建一个ConcreteFactory类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。

    -AbstractFactroy将产品对象的创建延迟到它的ConcreteFactory子类。

 

优点和缺点:

1、分离了具体的类。

    客户与类的实现分离。客户通过它们的抽象接口操纵实例。产品的类名也在具体工厂的实现中被分离;它们不出现在客户代码。

2、它使得易于交换产品系列。

    只需要改变具体的工厂就可以使用不同的产品配置。

3、它有利于产品的一致性。

    一个应用一次只能使用同一个系列中的对象。

4、难以支持新种类的产品。 

     AbstractFactory接口确定了可以被创建的产品集合。支持新种类的产品就需要扩展该工厂接口,这将涉及Abstractory类及其所有子类的改变。

 

解决方案:

    

1、 模式的参与者

    1、AbstractFactory

    -声明一个创建抽象产品对象的操作接口。

    2、ConcreteFactory

    -实现创建具体产品对象的操作

    3、AbstractProduct

    -为一类产品对象声明一个接口。

    4、ConcreteProduct

    -定义一个将被相应的具体工厂创建的产品对象。

    -实现AbstractProduct接口。

    5、Client

    -仅使用由AbstractFactory和AbstractProduct类声明的接口

2.实现方式

public abstract class AbstractFactory {
     
     public abstract AbstractProductA createProductA(); 

     public abstract AbstractProductB createProductB();
}

 

复制代码
class ConcreteFactory1 implements AbstractFactory
{
    public AbstractProductA createProductA()
    {
        
        return new ConcreteProductA1();
    }
    public AbstractProductB createProductB()
    {
     
        return new ConcreteProductB1();
    }
}
复制代码

 

参考资料

《设计模式:可复用面向对象软件的基础》

 

posted @   diameter  阅读(133)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示