前言:学习书籍《大话设计模式》
简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
- 优缺点
优点:满足了可维护性
简单工厂模式满足了程序的可维护性,如果直接new对象,那么new对象的代码会分布在程序的各个类的角落里,发生修改或者是需要重构的话,将会是一件很麻烦的事情,简单工厂模式将创建对象的操作抽取到一个工厂类中, 使用一个抽象类作为父类,根据不同的选择来返回不同的对象,使得代码更容易管理,可维护性更高。
缺点:违反了开放-封闭原则
如果新增一种对象,那么简单工厂模式的工厂类中的判断代码中就会多一个分支,发生了修改,违反了设计模式的对修改封闭的原则。
- 代码
类图
一个计算器的demo,拥有加减乘除四个对象,通过OperatorFactory类来根据不同算法选择来返回某一个对象
父类代码
public abstract class Super { public abstract Double count(Double num1,Double num2); }
子类代码
public class Add extends Super{ @Override public Double count(Double num1, Double num2) { return num1 + num2; } }
public class Divide extends Super { @Override public Double count(Double num1, Double num2) { return num1 / num2; } }
public class Multiply extends Super{ @Override public Double count(Double num1, Double num2) { return num1 * num2; } }
public class Subtract extends Super{ @Override public Double count(Double num1, Double num2) { return num1 - num2; } }
工厂核心代码
public class OperatorFactory { public Super operator(String operator){ Super s = null; try{ switch (operator){ case "+": s = new Add(); break; case "-": s = new Subtract(); break; case "*": s = new Multiply(); break; case "/": s = new Divide(); break; default: System.out.println("输入运算符有误"); break; } }catch (Exception e){ System.out.println("输入有误"+e.getMessage()); } return s; } }
- 总结
简单工厂模式虽然不完美,但是有它的闪光点,根据场景,灵活使用。