Template模式
来源:互联网 发布:大数据认证考试 编辑:程序博客网 时间:2024/06/05 16:14
其实所有设计模式都是有EIT结构组成,EIT就好比原子,具体的模式好比分子,分子由原子组成。
比如现在要画两幅画,这两幅画的背景都是蓝天白云,其中一幅画的前景是海鸥,
另外一幅画的前景是风筝。那么应该把不变的部分提取到父类,也就是把背景提取到父类,变化的部分放到子类。
public class E{ public void draw() { //蓝天白云 }}public class T extends E{ public void draw() { draw(); //海鸥 }}//客户端代码public class Client{ public void main() { E e = new T(); e.draw(); }}
当调用e.draw(); 时会首先调用父类的 draw 再调用子类的 draw。
这是一种实现方式,但这种方式有个缺点就是,子类与父类有较大的依赖,父类的 draw方法被调用后,后面改版,维护的成本就大了。我们可以使用另外一种方式来实现就是
Template Month模式。
Template Method模式:
public class E{ public draw() { //蓝天白云 onDraw(); } public void abstract onDraw();}public class T extends E{ public void onDraw() { //海鸥 } } //客户端代码public class Client{ public void main() { E e = new T(); e.draw(); }}
这种由客户端代码来调用E的实体函数,再通过接口控制反转来执行T的 onDraw()
这种模式叫 TM模式。其中E的draw() 方法是叫 template方法,onDraw()叫 hook方法
TM设计模式虽然已经很优秀了,但仍然有个不好的地方,就是 Client 这里会用到 E 这个父类,那么当有很多Client (客户端用户不止一个厂商)使用了E,是的E变化的自由度就变低了,解决办法如下。
Template Month模式:
interface I{ public void draw();}public class E implements I{ public void draw() { //蓝天白云 onDraw(); } public void abstract onDraw();}public class T extends E{ public void onDraw() { //海鸥 } } //客户端代码public class Client{ public void main() { I e = new T(); e.draw(); }}
0 0
- Template模式
- Template模式
- Template模式
- Template模式
- Template模式
- Template模式
- Template 模式
- Template模式
- Template模式
- Template 模式
- Template模式
- Template 模式
- Template模式
- Template模式
- Template模式
- Template模式
- Template模式 模板模式
- 设计模式 Template模式
- C++ 打印极值点下标(九度OJ 1126)
- android常见的弹窗对话框
- 每天一条linux命令--less命令
- HDU 2076 时针和分针夹角多大
- Redux without profanity
- Template模式
- Java的IO
- 可用的hadoop集群安装文档
- CentOS 7.2 team实现网卡聚合链路(双网卡绑定)脚本及验证
- C#之类继承,接口学习案例
- javascript 获取时间
- c++智能指针
- 菊花转:UIActivityIndicatorView
- 判断一个数组是否存在三个元素为某一定值