设计模式读书笔记之模版方法模式(Template)
2016-04-25 09:20
387 查看
模版方法模式:定义了一个算法/流程骨架,但是将一些步骤推迟到子类中去实现。
示例代码:
[java] view
plain copy
//模版
package designpattern.template;
public abstract class Template {
private void step1(){
System.out.println("This is the first step.");
}
protected abstract void step2();
private void step3(){
System.out.println("This is the third step.");
}
public void process(){
step1();
step2();
step3();
}
}
//实现类
package designpattern.template;
public class Concrete extends Template{
protected void step2() {
System.out.println("This is the second step, it's implemented in sub class");
}
}
//上下文
package designpattern.template;
public class Context {
private Template t;
public Context(Template t){
this.t = t;
}
public void process(){
t.process();
}
//test case
public static void main(String[] args) {
Context c = new Context(new Concrete());
c.process();
}
}
特点:
把公共的代码或不变的行为放在超类/模版中, 以隔离变化和不变,使不便的部分可复用。
模板方法的核心精神在于把已知的部分(不变化的部分)放在超类中被公用, 而把未知的部分(易变化,不确定的部分)留给子类各自去实现.
示例代码:
[java] view
plain copy
//模版
package designpattern.template;
public abstract class Template {
private void step1(){
System.out.println("This is the first step.");
}
protected abstract void step2();
private void step3(){
System.out.println("This is the third step.");
}
public void process(){
step1();
step2();
step3();
}
}
//实现类
package designpattern.template;
public class Concrete extends Template{
protected void step2() {
System.out.println("This is the second step, it's implemented in sub class");
}
}
//上下文
package designpattern.template;
public class Context {
private Template t;
public Context(Template t){
this.t = t;
}
public void process(){
t.process();
}
//test case
public static void main(String[] args) {
Context c = new Context(new Concrete());
c.process();
}
}
特点:
把公共的代码或不变的行为放在超类/模版中, 以隔离变化和不变,使不便的部分可复用。
模板方法的核心精神在于把已知的部分(不变化的部分)放在超类中被公用, 而把未知的部分(易变化,不确定的部分)留给子类各自去实现.
相关文章推荐
- 设计模式读书笔记之外观模式/门面模式(Facade)
- 树状数组
- 这些情况,去面试就是浪费时间!
- 第二章 知识图谱——机器大脑中的知识库
- 懒加载session 无法打开 no session or session was closed 解决办法(完美解决)
- 资源 genymotion-2.6.0-vbox.exe不能下载的解决方案
- simhash算法
- teacher页面的代码
- TCP/IP的网络客户端和服务器端程序
- Android 添加自定义BOOT_COMPLETED广播避免延迟
- ORACLE表空间的导入与导出
- 如何制作BUNDLE
- 深入浅析JavaScript中数据共享和数据传递
- Docker网络详解及pipework源码解读与实践
- 设计模式读书笔记之建造者模式(Builder)
- Android 点击按钮同时更换按钮背景颜色和按钮文本颜色
- web.xml设置:servlet-name url-pattern
- hadoop-1.2.1安装配置
- 声明属性的关键字
- 集线器,交换机,路由器的作用(转)