大话设计模式读书笔记(一)
来源:互联网 发布:淘宝怎么开微淘 编辑:程序博客网 时间:2024/05/18 16:54
简单的工厂模式
Why
假设,我们需要设计一个计算器以实现加减运算功能。那么,我们当然可以把这个计算器设计成一个class:
class Calculator { public int calc(int A, int B, char op) { if (op == '+') { return A + B; } if (op == '-') { return A - B; } }
但是,问题出现了:
- Calculator类应该实现两个独立的业务:界面和计算。这里只有一个业务,所以应该命名为Operation
- 程序没有任何的封装:不管我要加入其它任何的操作,比如乘除法,我都需要看原来的代码,也就是
calc
method。很多时候已经实现的操作是不能让看到的(比如该方法包含敏感操作或者敏感信息)。 - 程序缺乏扩展性和灵活性:每次新加入其它操作,所有代码都要重新编译以实现扩展。
为了实现封装和扩展性,我们可以用子类来继承Operation这个抽象类:
public abstract class Operation { private int A; private int B; // ignore getter and setter for A and B public int getResult() { return 0; }}
public class Add extends Operation { @Override public int getResult() { return super.getA() + super.getB(); }}
到此,Java的三大特性基本上都实现了,但是,每当Operation调用的时候,怎么确定是Add还是Subtract被调用了呢?换句话说,到底该实例化哪个class呢?
What
一个工厂是一个class,它可以根据输入来决定实例化哪个它所对应的class。可以把这个class放到客户端让客户端以此来调用相应的方法。注意,客户端不需要知道Operation class的具体实现,但是需要知道Operation class有哪些继承的子类可供调用。
How
public class OperationFactory { public static Operation createOperation(char operator) { Operation op = null; switch(operator) { case '+': op = new Add(); break; case '-': op = new Subtract(); break; } return op; }}
Where
这种设计模式其实应用的范围非常广泛,比如,在JDBC里面的sessionfactory。
Result
利用工厂来实例化相应的class可以使得应用所需实例化的class数目达到最少从而实现不增加冗余代码和运行负载的功能。
0 0
- 《大话设计模式》读书笔记(一)
- 《大话设计模式》读书笔记(一)
- 《大话设计模式》 读书笔记(一)
- 大话设计模式读书笔记(一)
- 大话设计模式读书笔记一
- 大话设计模式读书笔记(一)简单工厂
- 《大话设计模式》读书笔记
- 【读书笔记】大话设计模式
- 《大话设计模式》读书笔记
- 读书笔记--大话设计模式
- 大话设计模式 读书笔记
- 《大话设计模式》读书笔记
- 大话设计模式读书笔记
- 大话设计模式(一)
- 大话设计模式(一)
- 大话设计模式读书笔记(六)
- 《大话设计模式》 读书笔记(二)
- 大话设计模式读书笔记(二)
- TextSwticher 与 TextView 实现上下滚动和跑马灯效果
- Android面试一天一题——概述篇
- 自己实现的一个可以滚动展示数字的控件:DPScrollNumberLabel
- Java中Long与long的区别(转)
- 爱我T4 T4B T4+ A2.150129 MT6582官方线刷包+工具+驱动 解决rom被破坏问题亲测可用
- 大话设计模式读书笔记(一)
- leetcode2 Add Two Numbers
- 312. Burst Balloons
- Svn命令详解
- 从Stage角度看cassandra write
- Android系统各种类型的service刨根解读
- Spring WebApplicationContext初始化
- 文章标题
- FZU 2126 消去游戏