简单工厂模式

一句话概括简单工厂的特点就是,使用 唯一工厂类 来完成 抽象产品类 对象实例化的工作,客户端只负责调用工厂类的函数接口
举个例子,一个计算器项目中有一个名为 operationFactory 的工厂类,这个工厂类包含一个createOperate的成员方法,返回的是一个符合需求的该类型的对象。客户端只需要创建一个新对象并且把在这个对象赋值为调用 createOperator 的返回值。
以下是工厂类代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Operation{
Operation createOperate(string operator){
Operaton oper = null;
switch(operatpr){
case “+”:
oper = new OperationAdd();
break;
//其他类似运算省略
}
return oper;
}
}


以下是客户端代码:
1
2
3
4
5
Operator oper;
oper = OperationFactory.createOperate(“+”);
oper.numberA = 1;
oper.numberB = 2;
double result =oper.getResult();

Tips:

  1. 关于“工厂”对的设计模式其实有三种,除了简单工厂模式,还有工厂方法模式抽象工厂模式,三种设计模式确有关联:简单工厂和抽象工厂其实是在工厂方法的基础上进行的缩减和拓展,也可以理解为三种模式层层递进,逐步复杂,而且都遵循“开放-封闭原则”,解决客户端不决定具体实例化哪一个类,而是交给工厂类来实例化产品对象。使用工厂模式的目的常常是解耦,实现对初始化对象的封装,把验证无误的代码和经常需要修改的代码解耦。网络上经常把三个模式放在一起讲,《大话设计模式》分布在三个不相邻的章节。
  2. 三种工厂模式的组成比较
    简单/静态工厂类:唯一工厂类,1 个产品抽象类
    工厂方法类:一个抽象工厂类,多个工厂类,1 个产品抽象类
    抽象工厂类:多个工厂类,组合得到多个产品抽象类
  3. 工厂方法其实就是把简单工厂中的一个工厂类换成了一个抽象的工厂类和多个具体的工厂类。对比简单工厂和工厂方法的优缺点,前者代码量少,但是新增需求的时候就需要改动原来的工厂代码。后者代码量多,但是新增需求的时候只需要新增一个具体工厂类和对应的具体产品类(继承于抽象产品类)即可。
  4. 关于工厂方法和抽象工厂,简单来说,前者是创造了一种产品,后者是创造了一类产品。抽象工厂比较复杂,缺点是新增需求的时候要新增“产品族”