大话设计模式 | 1 简单工厂模式
《大话设计模式》是作者「程杰」通过趣味的场景设置,以诙谐的表达来解读和剖析「面向对象」编程思维和「设计模式」。书中的示例代码是以 .NET 的 C# 语言编写而成。
本文是我对《大话设计模式》的学习系列笔记的第一篇,简单工厂模式。
1. 定义
简单工厂模式 (Simple Factory Pattern),又称为静态工厂方法 (Static Factory Method) 模式,它属于类创建型模式。
对比现实生活中生产产品的工厂,在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,称为「工厂」类。
主要是为解决将「类实例化的操作」与「使用对象的操作」分开,让使用者不需要知道具体参数就可以实例化出所需要的「产品」类。
2. 组成
简单工厂模式主要是由三个角色组成:
「抽象产品」角色,是「具体产品」的父类,用来描述产品的公共接口。
「具体产品」角色,是「工厂」类创建的目标,所有创建的对象都是这个角色的某个具体类的实例。
「工厂」角色,负责实现创建所有实例的内部逻辑,可以被外界调用,根据传入不同参数从而创建不同「具体产品」类的实例。
注:这里将「工厂」类与「抽象产品」类连接,而不是与「具体产品」类连接,因为「工厂」类虽然是需要创建不同「具体产品」类的实例,但「工厂」类只需要知道「抽象产品」类就可以了。(这里还需要更好的理解)
3. 使用步骤
主要包含四步:
创建「抽象产品」类,并定义「具体产品」的公共接口;
创建「具体产品」类,并定义生产的「具体产品」;
创建「工厂」类,通过创建静态方法,根据传入不同参数来创建不同「具体产品」类的实例;
外界通过调用「工厂」类的静态方法,传入不同参数,从而创建不同「具体产品」类的实例。
4. 实例
《大话设计模式》中,是通过一个计算器为例进行说明的。
创建抽象产品类
创建 Operation
的抽象产品类,里面通过 virtual
关键字定义了产品的公共接口 getResult()
。
创建具体产品类
创建具体产品类(OperationAdd
、OperationSub
等),来继承Operation
的抽象产品类,并实现 getResult()
方法,来定义要生产的具体产品。
创建工厂类
创建工厂类 OperationFactory
,并定义静态方法 createOperate()
,通过传入不同参数来创建不同具体产品类的实例。
调用工厂类的静态方法
在主函数中,调用工厂类的静态方法 createOperate()
,并传入参数,如+
来创建 OperationAdd
这一具体产品类的实例。
代码参考:https://github.com/puran1218/DesignPatternWithCSharp
5. 参考
本文严重参考了这两篇文章:
评论