创建型模式-简单工厂

来源:互联网 发布:linux纯文本如何向上 编辑:程序博客网 时间:2024/05/22 05:33
结构图


模式说明
  1. 扩展点是Operation的实现类,如果增加新的Operation实现类,需要修改工厂类OperationFactory,即在OperationFactory条件分支中增加新的判断类型。
  2. 使用反射技术的工厂类,可避免因增加Operation实现而需要修改工厂条件分支的缺点。
  3. 客户端需要知道使用哪个工厂类OperationFactory或者OperationFactoryExtended。
  4. 客户端不关心使用哪个Operation的实现类。


客户端

public static void main(String[] args) {Operation oper = OperationFactory.createOperation(OperationFactory.OperationType.ADD);double result = oper.getResult(1.0, 2.0);System.out.println(result);oper = OperationFactoryExtended.createOperation("creation.simple.factory.OperationAdd");double result2 = oper.getResult(3.0, 4.0);System.out.println(result2);}


类设计

public final class OperationFactory {public static enum OperationType {ADD, SUB;}public static Operation createOperation(OperationType type) {Operation oper = null;if (type == OperationType.ADD) {oper = new OperationAdd();} else if (type == OperationType.SUB) {oper = new OperationSub();}return oper;}}public class OperationFactoryExtended {/** * use reflection to remove the IF clause *  * @param qualifiedOperationName * @return */public static Operation createOperation(String qualifiedOperationName) {try {Class<Operation> clz = (Class<Operation>) Class.forName(qualifiedOperationName);return clz.newInstance();} catch (Exception e) {throw new RuntimeException(e);}}}public interface Operation {public double getResult(double numberA, double numberB);}public class OperationAdd implements Operation {@Overridepublic double getResult(double numberA, double numberB) {return numberA + numberB;}}public class OperationSub implements Operation {@Overridepublic double getResult(double numberA, double numberB) {return numberA - numberB;}}




0 0
原创粉丝点击