设计模式-创建型模式之工厂方法模式

和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂,定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象。

工厂方法模式的主要角色:

  • 抽象工厂(AbstractFactory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。
  • 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  • 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

工厂方法模式的实现

抽象工厂接口:

具体工厂

咖啡店类

从以上的编写的代码可以看到,要增加产品类时也要相应地增加工厂类,不需要修改工厂接口的代码了,这样就解决了简单工厂模式的缺点。

工厂方法模式是简单工厂模式的进一步抽象。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。

**优点:**用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则:

**缺点:**每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

相关推荐
isTrueLoveColour1 小时前
java设计模式--结构型模式
java·开发语言·设计模式
咩咩大主教2 小时前
C++设计模式2:代理模式
linux·服务器·c语言·开发语言·c++·设计模式·代理模式
不是仙人的闲人6 小时前
C++ 设计模式——组合模式
c++·设计模式·组合模式
lucky.帅13 小时前
使用C#的异步和依赖注入实现网络数据存储
开发语言·数据库·后端·设计模式·c#·.net·visual studio
Fuliy9614 小时前
游戏开发设计模式之迭代器模式
java·开发语言·算法·unity·设计模式·迭代器模式
澄澈i17 小时前
设计模式学习[4]---依赖倒置原则+里氏代换原则
学习·设计模式·依赖倒置原则
Shinka-深深1 天前
《图解设计模式》笔记(三)生成实例
笔记·设计模式
为美好的生活献上中指1 天前
Java学习Day33:HTML 第四章:大战虎先锋(js)
java·开发语言·javascript·学习·算法·设计模式·html
疾风终究没有归途1 天前
观察者模式解析:实现对象间的舞蹈同步!
观察者模式·设计模式·工作原理·依赖关系·对象同步·状态更新·代码灵活性
Fuliy961 天前
游戏开发设计模式之责任链模式
unity·设计模式·游戏引擎·责任链模式·游戏开发·责任链