工厂模式

工厂模式

 简单工厂模式

  • 简单工厂模式的优点:将对象的创建交给专门的工厂类负责,实现了对象的创建和对象的使用分离。
  • 简单工厂模式的缺点:工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,需要增加一个 if 判断分支才能支持。而且当产品类型较多时,简单工厂的 if 判断将会非常多,不容易维护。

工厂类代码:

一切准备就绪,女娲就可以开始造人了:

工厂方法模式

定义一个用于创建对象的接口或抽象类,让子类决定实例化哪一个类。

  • 工厂方法模式的优点:遵循了开闭原则,扩展性极强。比如现在要增加一个绿皮肤的人类,我们只需要增加一个创建绿皮肤人类的工厂,这个工厂继承自抽象工厂即可,不需要改变原有代码,可维护性高。
  • 工厂方法模式的缺点:增加了类的数量,当有成千上万个类型的产品时,就需要有成千上万个工厂类来生产这些产品。

其中,Human接口及其子类的代码不变,增加了一个抽象工厂AbstractHumanFactory,里面定义了一个造人的方法 createHuman(),具体创造什么类型的人由其子工厂实现。

抽象工厂类及其子工厂类如下:

女娲造人的方式如下:

抽象工厂模式

  • 抽象工厂模式的优点:增加固定类型产品的不同具体工厂比较方便。例如现在女娲要创造一个绿皮肤的人,只需要再创建一个绿皮肤人的工厂继承抽象工厂就可以了。
  • 抽象工厂模式的缺点:类图优点复杂,可读性没有工厂方法模式那么好。

抽象工厂我们定义了两个方法,createMan() 和 createWoman()用来表示生产男人和女人,不管男人或女人,都有不同的肤色,所以我们定义了三个子工厂用来创建不同肤色的人(包括男人和女人),这三个子工厂重写了父类工厂的两个方法。具体实现代码如下。

Human接口及其两个实现类:

三种肤色的男人和女人:

抽象工厂代码:

具体工厂代码:

女娲使用工厂创造人类:

posted @   happy_in  阅读(49)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示