大话设计模式 | 1 简单工厂模式
《》是作者「程杰」通过趣味的场景设置,以诙谐的表达来解读和剖析「面向对象」编程思维和「设计模式」。书中的示例代码是以 .NET 的 C# 语言编写而成。
本文是我对《大话设计模式》的学习系列笔记的第一篇,简单工厂模式。
1. 定义
简单工厂模式 (Simple Factory Pattern),又称为静态工厂方法 (Static Factory Method) 模式,它属于类创建型模式。
对比现实生活中生产产品的工厂,在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,称为「工厂」类。
主要是为解决将「类实例化的操作」与「使用对象的操作」分开,让使用者不需要知道具体参数就可以实例化出所需要的「产品」类。
2. 组成
简单工厂模式主要是由三个角色组成:
「抽象产品」角色,是「具体产品」的父类,用来描述产品的公共接口。
「具体产品」角色,是「工厂」类创建的目标,所有创建的对象都是这个角色的某个具体类的实例。
「工厂」角色,负责实现创建所有实例的内部逻辑,可以被外界调用,根据传入不同参数从而创建不同「具体产品」类的实例。

注:这里将「工厂」类与「抽象产品」类连接,而不是与「具体产品」类连接,因为「工厂」类虽然是需要创建不同「具体产品」类的实例,但「工厂」类只需要知道「抽象产品」类就可以了。(这里还需要更好的理解)
3. 使用步骤
主要包含四步:

4. 实例
《大话设计模式》中,是通过一个计算器为例进行说明的。
创建抽象产品类
创建 的抽象产品类,里面通过 关键字定义了产品的公共接口 。
public class Operation
{
...
public virtual double getResult()
{
double result = 0;
return result;
}
}
创建具体产品类
创建具体产品类(、 等),来继承 的抽象产品类,并实现 方法,来定义要生产的具体产品。
public class OperationAdd : Operation
{
public override double getResult()
{
double result = 0;
result = FirstNumber + SecondNumber;
return result;
}
}
public class OperationSub : Operation
{
public override double getResult()
{
double result = 0;
result = FirstNumber + SecondNumber;
return result;
}
}
创建工厂类
创建工厂类 ,并定义静态方法 ,通过传入不同参数来创建不同具体产品类的实例。
public class OperationFactory
{
public static Operation createOperator(string inputOperator)
{
Operation oper = null;
switch(inputOperator)
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
...
}
return oper;
}
}
调用工厂类的静态方法
在主函数中,调用工厂类的静态方法 ,并传入参数,如 来创建 这一具体产品类的实例。
class Program
{
static void Main(string[] args)
{
...
Operation oper;
oper = OperationFactory.createOperator(inputOperator);
...
double result = oper.getResult();
}
}

5. 参考
本文严重参考了这两篇文章: