【HeadFirst设计模式】8.模板方法模式
模板方法
定义:
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使用得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
策略模式:
定义一个算法家族,并让这些算法可以互换。正因为每一个算法都被封装起来了,所以客户可以轻易地使用不同的算法。
  
好莱坞原则:
别调用我们,我们会调用你。(依赖抽象)
与依赖倒置原则:
避免使用具体类,而多使用抽象
用模版方法来做排序(用非继承的方式实现模板方法):
在Arrays中提供了sort的静态方法,sort要求传进的是一个数组。
这里的sort是一个模板方法,但是它并不是通过继承来实现的,而是将该模样方法中所封装的算法的约束转移至数组中。
也就是说,被传进来的数组中的对象必须实现Comparable接口,否则sort无法对数组进行排序。
sort并不关心Comparable的具体行为,只要能提供sort排序所需要的接口即可。
要点:
模板方法定义了算法的步骤,把这些步骤的实现延迟到子类。
模板方法模式为我们的提供了一种代码复用的重要技巧。
模板方法的抽象类可以定义具体方法、抽象方法和钩子。
抽象方法由子类实现。
钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。
为了防止子类改变模板方法中的算法,我们可以将模板方法声明为final。
好莱坞原则告诉我们,将决策权放在高层模块中,以便决定如何以及何时调用低层模块。
你将在真实世界代码中看到模版方法模式的许多变体,不要期待它们全部都是一眼就可以被你认出的。
策略模式和模板方法模式都封装衍,一个用组合,一个用继承。
工厂方法是模式方法的一种特殊版本。
OO原则备忘:
封装变化
多用组合,少用继承
针对接口编程,不针对实现编程
为交互对象之间的松耦合设计而努力
类应该对扩展开放,对修改封闭
依赖抽象,不要依赖具体类
只和朋友谈
别找我,我会找你
【HeadFirst设计模式】8.模板方法模式的更多相关文章
- HeadFirst设计模式之模板方法模式
		
一. 1.The Template Method defines the steps of an algorithm and allows subclasses to provide the impl ...
 - 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
		
原文:乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 模板方法模式(Template Method ...
 - 折腾Java设计模式之模板方法模式
		
博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...
 - js设计模式——6.模板方法模式与职责链模式
		
js设计模式——6.模板方法模式与职责链模式 职责链模式
 - [C++设计模式]template 模板方法模式
		
模板法模式:定义一个操作中的算法骨架.而将一些步骤延迟到子类中. 依照<headfirst 设计模式>的样例.煮茶和煮咖啡的算法框架(流程)是一样的.仅仅是有些算法的实现是不一样的,有些是 ...
 - java设计模式之模板方法模式
		
模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差 ...
 - C#设计模式(14)——模板方法模式(Template Method)
		
一.引言 提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简 ...
 - 【GOF23设计模式】模板方法模式
		
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_模板方法模式.钩子函数.方法回调.好莱坞原则 package com.test.templateMethod; publi ...
 - [设计模式] 22 模板方法模式 template
		
转http://www.jellythink.com/archives/407 在GOF的<设计模式:可复用面向对象软件的基础>一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而 ...
 - java_设计模式_模板方法模式_Template Method Pattern(2016-08-11)
		
定义: 定义一个操作中算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤.这里的算法的结构,可以理解为你根据需求设计出来的业务流程.特定的步骤就是指那些 ...
 
随机推荐
- 更改OS序列号(slmgr)
			
slmgr /ipk 489j-abc-def-hij-mnn slmgr /skms 8.8.8.8:1688 slmgr /ato
 - JFinal tomcat配置根路径(包括windows和linux)
			
http://my.oschina.net/u/173975/blog/350666 jfinal的demo直接部署到tomcat上,会由于路径问题导致资源加载不到,路径跳转不正确等问题,解决办法如下 ...
 - c++ 怎样获取系统时间
			
c++ 怎样获取系统时间 2008-04-28 15:34 //方案— 长处:仅使用C标准库:缺点:仅仅能精确到秒级 #include <time.h> #include <stdi ...
 - 使用Twisted进行socket编程
			
你的协议处理类通常是twisted.internet.protocol.Protocol的子类.许多协议处理继承于该类或者比该类更加方便的该类的子类.一个protocol类的实例可能反复连接,也可能在 ...
 - page cache和buffer cache 图解
			
http://www.cnblogs.com/yrpen/p/3777963.html http://www.cnblogs.com/hustcat/archive/2011/10/27/222699 ...
 - Linux系统常用命令 __转载的
			
1.登录linux系统命令:login 用户名 密码: 2.注销linux系统命令:logout ; 3.在linux系统中进入windows系统(图形界面)命令:Start x; 4.关闭lin ...
 - ios通知-kvo
			
// KVC: Key Value Coding, 常见作用:给模型属性赋值 // KVO: Key Value Observing, 常用作用:监听模型属性值的改变 // // ViewCon ...
 - latch和DFF的区别和联系
			
1.latch的缺点 ①没有时钟端,不受系统同步时钟的控制,无法实现同步操作:和当前我们尽可能采用时序电路的设计思路不符. ②对输入电平敏感,受布线延迟影响较大,很难保证输出没有毛刺产生: ③latc ...
 - N_F1_APPROVE
			
package nc.bs.pub.action; import java.util.ArrayList; import java.util.Hashtable; import java.util.L ...
 - 通过Workbook类 生成Excel导出数据
			
需求: 实现错误信息生成Excel保存到本地让用户查看. 刚开始使用了微软自带的Microsoft.Office.Interop.Excel类库. Microsoft.Office.Interop.E ...