大话设计模式之工厂方法模式
来源:互联网 发布:泳衣品牌 知乎 编辑:程序博客网 时间:2024/06/09 15:09
参考—->程杰大神的《大话设计模式》—org
记一下一遍以后重复看时有新的理解,メモ
小记—>
在UML绘图中 斜体表示抽象函数 若是接口会有interface标识
这次对应书中的例子的结构图
如果想后期增加功能时,如如图中的N次方的功能,需要更改的是写一个实现接口工厂的N次方工厂的类,然后添加一个继承抽象运算类的N次方类。
遵循 修改封闭 扩展开放 的原则。。。。
抽象类—->
package co.jp.li.operation;/** * 抽象类是不能被实例化的。 * 抽象类里面可以有抽象函数和具体的函数 * 抽象函数必须在抽象类中 * 声明功能抽象类 * */public abstract class Operation { private double numberA; private double numberB; /** * 利用构造参数进行赋值 * */ public Operation(double numberA, double numberB) { super(); this.numberA = numberA; this.numberB = numberB; } public abstract void getResult();}
声明具体的功能的类继承抽象的功能类 重写抽象函数
加法和减法—>
package co.jp.li.operation;/** * 声明具体的功能的类继承抽象的功能类 重写抽象函数 * */public class AddOperation extends Operation { private double numberA, numberB; Operation operation; public AddOperation(double numberA, double numberB) { super(numberA, numberB); // TODO Auto-generated constructor stub this.numberA = numberA; this.numberB = numberB; } @Override public void getResult() { // TODO Auto-generated method stub System.out.println("たす は---->" + (numberA + numberB)); }}
package co.jp.li.operation;/** * 声明具体的功能的类继承抽象的功能类 重写抽象函数 * */public class SubOperation extends Operation { private double numberA, numberB; public SubOperation(double numberA, double numberB) { super(numberA, numberB); // TODO Auto-generated constructor stub this.numberA = numberA; this.numberB = numberB; } @Override public void getResult() { // TODO Auto-generated method stub System.out.println("ひく は---->" + (numberA - numberB)); }}
一个接口利用生产运算符号和参数赋值接口工厂—>
package co.jp.li.factory;import co.jp.li.operation.Operation;/** * 一个接口利用生产运算符号和参数赋值 * */public interface IFactory { Operation CreateOperation(double numA,double NumB);}
得到加减法的功能实例化的工厂—>
package co.jp.li.factory;import co.jp.li.operation.AddOperation;import co.jp.li.operation.Operation;/** * 声明具体的功能的类工厂实现总的工厂的接口 * */public class AddFactory implements IFactory { public Operation CreateOperation(double numA,double numB) { return new AddOperation(numA,numB); }}
package co.jp.li.factory;import co.jp.li.operation.Operation;import co.jp.li.operation.SubOperation;/** * 声明具体的功能的类工厂实现总的工厂的接口 * */public class SubFactory implements IFactory { public Operation CreateOperation(double numA,double numB) { return new SubOperation(numA,numB); }}
用户输入测试—>
package co.jp.li.courstom;import co.jp.li.factory.IFactory;import co.jp.li.factory.SubFactory;import co.jp.li.operation.Operation;public class TestClient { public static void main(String[] args) { // TODO Auto-generated method stub /** * 实例化具体的功能的类工厂返回得到 * 实现的接口总工长 用来得到具体的功能类 * */ IFactory iFactory = new SubFactory(); /** * 创建调用得到具体的功能类返回抽象类的具体事例(其实抽象类是不能被实例化的这个地方 * 只是得到了实现抽象类的功能类的具体事例) * */ Operation operation = iFactory.CreateOperation(1.3, 1.0); operation.getResult(); }}
和简单的工厂进行相比的话,当增加一个功能时工厂方法模式没有违背
修改封闭 扩展开放的原则,简单工厂在增加新的功能时需要修改工厂类
什么switch 加case 等等,破坏了修改封闭。
阅读全文
0 0
- 大话设计模式之工厂方法模式
- 大话设计模式之工厂方法模式
- 《大话设计模式》之工厂方法模式
- 大话设计模式之工厂方法
- 大话设计模式读书笔记之工厂方法
- 大话设计模式 工厂方法
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 大话设计模式之简单工厂模式&工厂方法模式&抽象工厂模式
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- java设计模式大话之工厂方法模式
- 《大话设计模式》java实现之工厂方法模式
- 大话设计模式笔记----工厂方法模式
- 大话设计模式_工厂方法模式
- 大话设计模式--工厂方法模式
- 《大话设计模式》-- 7.工厂方法模式
- 大话设计模式 工厂方法模式
- 大话设计模式-工厂方法模式
- 大话设计模式-工厂方法模式
- C++中TRACE宏及assert()函数的使用
- Lucene全文检索学习笔记(一):lucene的应用
- 2180: GJJ的日常之沉迷数学 (逆元)
- 记录git指令
- 未来在何方?
- 大话设计模式之工厂方法模式
- forEach
- Impala优化基本方案
- 素数筛法
- 机器学习十大常用算法小结
- 【UWP开发】如何将win10 UWP应用安装部署到xbox one
- 全栈工程师之路-中级篇之小程序开发-第二章第六节tabBar详细说明
- 使用STM32CubeMX进行STM32F429 LCD编程<二>层配置
- C#反射 从一个文本文档读取属性名和对应值,复制给对象