大话设计模式笔记(六)の工厂方法模式
程序员文章站
2022-05-23 19:22:30
栗子回顾 简单工厂模式: "https://www.cnblogs.com/call me devil/p/10926633.html" 运算类使用工厂方法模式实现 UML图 代码实现 工厂接口 运算基础类 为节省篇章,详见 "简单工厂模式" ,此处省略。 以下加减乘除运算类(OperationAd ......
栗子回顾
简单工厂模式:
运算类使用工厂方法模式实现
uml图
代码实现
工厂接口
/** * 工厂接口 * created by callmedevil on 2019/7/7. */ public interface ifactory { /** * 创建运算类 * * @return */ baseoperation createopertaion(); }
运算基础类
为节省篇章,详见,此处省略。
以下加减乘除运算类(operationadd、operationsub、operationmul、operationdiv)同。
加法工厂
/** * 加法工厂 * created by callmedevil on 2019/7/7. */ public class addfactory implements ifactory{ @override public baseoperation createopertaion() { return new operationadd(); } }
减法工厂
/** * 减法工厂 * created by callmedevil on 2019/7/7. */ public class subfactory implements ifactory { @override public baseoperation createopertaion() { return new operationsub(); } }
乘法工厂
/** * 乘法工厂 * created by callmedevil on 2019/7/7. */ public class mulfactory implements ifactory{ @override public baseoperation createopertaion() { return new operationmul(); } }
除法工厂
/** * 除法工厂 * created by callmedevil on 2019/7/7. */ public class divfactory implements ifactory{ @override public baseoperation createopertaion() { return new operationdiv(); } }
测试
/** * 工厂方法模式测试 * created by callmedevil on 2019/7/7. */ public class test { public static void main(string[] args) { ifactory operfactory = new addfactory(); baseoperation oper = operfactory.createopertaion(); oper.setnuma(1); oper.setnumb(2); double result = oper.getresult(); system.out.println("加法测试结果:" + result); } }
测试结果
加法测试结果:3.0
工厂方法模式
与简单工厂比较
简单工厂模式的最大优点在于工厂类中,包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
结构图
总结
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码进行。你想要加功能,本来是改工厂类的,而现在是修改客户端。