创建型模式-简单工厂
来源:互联网 发布:linux纯文本如何向上 编辑:程序博客网 时间:2024/05/22 05:33
结构图
模式说明
模式说明
- 扩展点是Operation的实现类,如果增加新的Operation实现类,需要修改工厂类OperationFactory,即在OperationFactory条件分支中增加新的判断类型。
- 使用反射技术的工厂类,可避免因增加Operation实现而需要修改工厂条件分支的缺点。
- 客户端需要知道使用哪个工厂类OperationFactory或者OperationFactoryExtended。
- 客户端不关心使用哪个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
- 创建型模式-简单工厂
- 创建型模式-简单工厂
- 简单工厂模式[创建型]
- 创建型模式:工厂模式(简单工厂模式,抽象工厂模式,工厂模式)
- 创建型模式之简单工厂模式
- 创建型模式-----简单工厂模式
- 创建型设计模式:简单工厂模式
- 创建型模式之简单工厂模式
- 创建型设计模式-简单工厂模式
- 简单工厂模式-创建型模式
- 创建型模式—简单工厂模式
- 创建模式--简单工厂模式
- 创建型模式_简单工厂
- 设计模式--创建型--简单工厂
- 设计模式-创建型01-简单工厂
- 创建型——简单工厂模式
- Java简单工厂模式-创建型
- 创建型模式-简单工厂方法(simple_factory)
- เล่นคาสิโนออนไลน์ผ่านเน็ต
- rpm管理
- 使用Easybcd 安装双系统 windows+ubuntu
- 每天一个linux命令(8):cp 命令
- 总结nagios邮件报警(mutt+msmtp)不能发邮件的原因
- 创建型模式-简单工厂
- Generator
- scala入门-02基础知识->方法
- 程序员的装备
- Filter 过滤器
- std::unary_function
- 关于php.ini的若干问题小结
- 多久能学会编程
- 通过代码自定义cell(cell的高度不一致)