设计模式-工厂模式

背景

做一个订购披萨的程序。

通常设计:

①做一个抽象父类披萨,不同的披萨分别继承这个父类,并实现披萨准备、制作、打包等流程

②在订购披萨程序类内,根据输入的名字,利用条件判断new 对应的披萨类,执行披萨类里的方法。

问题:

违反了OCP原则(开闭原则),对扩展开放,对修改关闭。当要增加披萨种类时,需要更改所有订购披萨程序类,要多加一句条件判断。如果有很多订购披萨类,代码的修改量太大。

简单工厂模式

分析:

这样的设计方法,意味着所有创建披萨的代码,都可能被修改,而创建披萨的代码可能有多处。

思路:

把创建对象的代码封装到一个类中,这样增加新的种类时,只需要修改这个类,不需要修改其他创建对象的代码。这就是简单工厂模式。

基本介绍

简单工厂类属于创建模式,是工厂模式的一种。是由一个工厂对象决定创建出哪一种产品的实例。

本质上简单工厂是一个封装了实例化对象行为的类。

常用于需要大量的创建某种对象时。

修改方法

创建SimpleFactory()类封装之前放在订购披萨程序内的创建类的代码。对外提供一个方法,接收需要的披萨种类,返回对应种类的披萨类。

工厂方法模式

需求增加:

披萨的种类变多,可以两种形式组合,比如:鸡肉卷边披萨,牛肉普盘披萨,鸡肉普盘披萨等。

单一的简单工厂只能产出一种形式的披萨,无法满足需要。

基本介绍

将实例化对象的方法抽象,在子类中具体实现,将对象的实例化推迟到子类。

修改方法

在工厂父类中声明创建披萨的父类方法,根据一种组合形式创建一系列工厂子类:卷边披萨类,普盘披萨类......在子类中实现抽象方法。

在使用工厂时,创建对应披萨种类的工厂子类,调用父类中的抽象方法,创建出对应组合的披萨。

抽象工厂模式

基本介绍

是对工厂方法模式的改进,通过定义一个interface用于创建相关有依赖关系的简单工厂,代替了工厂方法模式中的抽象类。

通过接口将一系列简单工厂分类,便于调用。

接口层面作为工厂的抽象层面,一系列简单工厂作为实现层面,具体实现对象的实例化。

在使用时可以根据创建对象的类型使用对应的工厂类。

将单一的简单工厂变为一个有组织的工厂族,便于代码的维护和拓展。

修改方法

创建一个抽象工厂接口,声明一个输入肉类创建对应披萨的方法。

根据普装,卷边的披萨类型,创建一系列简单工厂类,并实现抽象工厂接口,实现披萨种类的组合。

在使用时,声明对应需要的简单工厂,调用接口方法,产出对应的披萨类。

相关推荐
东阳马生架构26 分钟前
Sentinel源码—8.限流算法和设计模式总结二
算法·设计模式·sentinel
冰茶_2 小时前
C#中常见的设计模式
java·开发语言·microsoft·设计模式·微软·c#·命令模式
Niuguangshuo3 小时前
Python 设计模式:访问者模式
python·设计模式·访问者模式
不当菜虚困3 小时前
JAVA设计模式——(七)代理模式
java·设计模式·代理模式
RationalDysaniaer5 小时前
Go设计模式-观察者模式
观察者模式·设计模式·golang
千千寰宇5 小时前
[设计模式/Java] 设计模式之解释器模式【27】
数据库·设计模式
麓殇⊙6 小时前
设计模式-- 原型模式详解
设计模式·原型模式
电子科技圈6 小时前
XMOS空间音频——在任何设备上都能提供3D沉浸式空间音频且实现更安全地聆听
经验分享·设计模式·性能优化·计算机外设·音视频
智想天开6 小时前
11.原型模式:思考与解读
设计模式·原型模式
XiaoLeisj6 小时前
【设计模式】深入解析代理模式(委托模式):代理模式思想、静态模式和动态模式定义与区别、静态代理模式代码实现
java·spring boot·后端·spring·设计模式·代理模式·委托模式