一、工厂模式
工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态:
- 简单工厂(Simple Factory)模式
- 工厂方法(Factory Method)模式
- 抽象工厂(Abstract Factory)模式
二、简单工厂模式
Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。
简单工厂模式属于类创建型模式,可以根据不同的参数,返回不同类的实例,被创建的实例通常都具有共同的父类。
三、简单工厂模式实例
我们都使用过计算器,计算器中有10个数字按键,和其他的功能按键,我们以 + - * / 为例,每一个功能都是操作符,所以4个实体功能都具有共同的父类,并且给两个参数,都会返回一个结果,那么4个实例都拥有共同的函数,所以可以用简单工厂模式来创建这4个功能按键,接口是操作符。
代码实现:
public class OperationFactory {
public static Operation createOperate(String operate) {
Operation op = null;
switch (operate) {
case "+": {
op = new OperationAdd();
break;
}
case "-" {
op = new OperationSub();
break;
}
case "*"{
op=new OperationMul();
break;
}
case "/"{
op=new OperationDiv();
break;
}
}
return op;
}
}
四、优点与缺点
优点:
工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端免除直接创建产品对象的责任,而仅仅“消费”产品。简单工厂模式通过这种做法实现了对责任的分割。
缺点:
- 当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
- 同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。
- 另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。