抽象工厂模式

理论

 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

抽象工厂模式的优点:

  1. 最大的好处是易于交换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。

  2. 第二好处是,它让具体的创建实例过程于客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。

实例

实现数据库访问,要求包含“新增用户”和“得到用户”
用户有 ID 和 Name 两个属性

初步实现

工厂方法模式

UML类图

 代码实现

抽象工厂模式

UML类图

代码实现

只有一个 User 类和 User 操作类的时候,只需要工厂方法模式。当数据库中有很多的表,而 SOL Server 和 Access 又是两个不同的分类,所以解决这种涉及到多个产品系列的问题,就需要用一种专门的工厂模式叫抽象工厂模式。

抽象工厂模式的缺点:

如果有增加功能的需求,比如要增加项目表 Project,就需要增加三个类 AbstractProject、SqlserverProject、AccessProject,还需要更改对应的三个工厂类才可以完全实现。

而且当有很多客户端程序时,会有很多地方在使用 AbstractUser 或 AbstractDepartment, 这样的设计需要在每一个类的开始声明 AbstractFactory* factory = new SqlServerFactory(); 会导致在更改数据库时改动所有的声明。

简单工厂+抽象工厂

UML类图

代码实现

另外, 在 C# 中,所有在用简单工厂的地方,都可以考虑用反射技术来去除 switchif,解除分支判断带来的耦合。

后续:C++中也可继续改进。

posted @   KYZH  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示

目录导航