设计模式(二)工厂模式:1-简单工厂模式
2017-09-14 17:31
260 查看
模拟场景:
现在有如下需求,需要构造一个运算器(Operation)去实现加减乘除的功能,怎么设计?
思想:
所需要构造的对象是运算器(Operation),因为没有具体功能的运算器,是毫无作用的,所以可以将其定义为抽象类(Abstract Class)。
需要有具体意义的构造器:加法运算器(OperationAdd),减法运算器(OperationSub),乘法运算器(OperationMul),除法运算器(OperationDiv)。
根据工厂模式的思想,将这些构造器的创建工作,统一的管理起来,用一个工厂(OperationFactory)去创建。
UML:
1 public final class OperationFactory { 2 3 private static final Map<Class<?>, AbsOperation> operMap = new HashMap<>(); 4 5 @SuppressWarnings("unchecked") 6 public static <T extends AbsOperation> T createOperation3(Class<T> operationClass) { 7 try { 8 T t; 9 if (operMap.containsKey(operationClass)) { 10 t = (T) operMap.get(operationClass); 11 } else { 12 t = operationClass.newInstance(); 13 operMap.put(operationClass, t); 14 } 15 return t; 16 } catch (InstantiationException | IllegalAccessException e) { 17 throw new ArithmeticException("未定义的运算类型"); 18 } 19 } 20 21 }OperationFactory
通过存储一个 Map,将已经创建过的对象,存储在 Map 中,在第二次调用方法时,直接从 Map 中获取对象,从而达到单例的目的。
总结:
- 简单工厂模式,由于其工厂对象是独立的,一般都是将其中创建对象的方法设置为 static,避免创建工厂对象,所以也被称为静态工厂模式(Static Factory Method).
- 由于方法是静态的,导致在实现单例时,代码有点不舒服,就是在需要将 Map 设计为 Class-AbsOperation 结构,导致在具体实现中,需要强转。
- 简单工厂模式最大的缺点在于,面对新增的类,例如阶乘运算器,不但需要新增一个运算器类,还要对 createOperation() 方法做出改变,这就违反了开闭原则。
- 这一点,在之后的工厂方法模式(Factory Method)中给出了解决方案。
相关文章推荐
- Java设计模式-简单工厂模式
- 设计模式学习笔记三:简单工厂(Simple Factory)
- C#之三十八 简单工厂设计模式
- php设计模式_简单工厂2
- 设计模式学习1 简单工厂模式
- 简单工厂设计模式计算器
- [Java] 设计模式之工厂系列 01 简单工厂 - 缺点 :产生产品系列的时候很麻烦,会工厂泛滥
- 设计模式--简单工厂模式
- 大话设计模式之简单工厂设计模式观后感
- 设计模式-简单工厂(1,简单继承,用来比较与工厂模式的区别)
- 设计模式--简单工厂
- 设计模式——三个工厂模式(简单工厂,工厂方法,抽象工厂)
- 设计模式-简单工厂模式
- 设计模式(二)简单工厂与策略模式
- Java技术_每天掌握一种设计模式(003)_使用场景及简单实例(创建型:工厂方法)
- 设计模式---简单工厂
- python设计模式(一)--简单工厂(中)
- 设计模式之简单工厂模式
- 设计模式: 简单工厂, 工厂方法, 和抽象工厂总结
- java深入浅出设计模式----简单的工厂模式(一)----初学者容易犯的错误(一)