模版方法模式,实际上就是指子类做方法实现,父类做算法实现。

通常情况下,子类继承父类,我们是站在子类的视角上来看父类的,目的不外乎下面三个

  • 1,子类继承父类的方法
  • 2,通过子类来增加方法,实现新的功能
  • 3,子类重写父类方法,来改变程序的行为

今天,我们站在父类的角度俩看待这个问题,我们声明了抽象方法,并将抽象方法来交给子类实现,,所以,父类的要求就是如下

  • 1,要求子类实现抽象方法

从父类的角度来看,这就是模版工厂方法。

下面举个例子,比如说手机有一个功能,就是打电话,用软件工程的属于来说,这是一个算法,,这个算法包括三个步骤,拨号,通话,挂断这三个,但是不同的厂家对这三个方法的实现不一样,比如说

老式诺基亚

  • 拨号->按键盘的数字键
  • 通话->按通话键
  • 挂断->按挂断键

iphone

  • 拨号->触屏拨号
  • 通话->点击触屏通话键
  • 挂断->点击触屏挂断键

金立语音王。。。。

  • 拨号+通话+挂断->声控,给张总打电话

尽管不同的厂家的实现方法不一样,但是最后这个算法是电话来定的,也就是拨号,通话,挂断,也就是说各个厂家给不同的实现(即拨号,通话,挂断的实现方法),而手机则规定同一的算法(打电话,算法给先拨号,后通话,最后挂断)。到这里,这个模版方法基本上了解了吧,就是子类实现父类的抽象方法,而父类指定算法,这个算法不能更改。

好了,上面的叙述完了,下面就是具体的代码了

父类,规定子类的要实现的方法和自己的算法

package templatemethod;

public abstract class AbstractDisplay {
//方法
public abstract void open();
public abstract void begin();
public abstract void close();
//算法
public final void display(){
open();
for(int i=0;i<5;i++){
begin();
}
close();
}
}

子类,实现父类的要实现的方法

package templatemethod;

public class CharDisplay extends AbstractDisplay {

    private String displaystr;

    public String getDisplaystr() {
return displaystr;
} public void setDisplaystr(String displaystr) {
this.displaystr = displaystr;
} public CharDisplay(String str){
this.displaystr = str;
} @Override
public void open() {
System.out.println("******this is chardisplay***********");
} @Override
public void begin() {
System.out.println(this.displaystr);
} @Override
public void close() {
System.out.println("******this is end***********");
} }

测试类

package templatemethod;

public class test {

    public static void main(String[] args) {
AbstractDisplay ad = new CharDisplay("hello, world");
ad.display();
} }

Template Method模式的更多相关文章

  1. Template Method模式和Strategy模式[继承与委托]

    继承 program by difference. 通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code. 过度使用继承的代价是巨大的.应使用组合或者委托来替代继承. Tem ...

  2. 条款22 template method 模式

    template method 模式,模板方法模式 其实他和C++模板没有关系. 前者是提供的为派生类设计者提供清晰指示的一种方法,这个事实表示"如何去实现基类所规定的契约" 基类 ...

  3. 设计模式 Template Method模式 显示程序猿的一天

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 不断设计模式~ Template Method模式 老套路,看高清 ...

  4. 设计模式Template Method模式(Template Method)摘录

    23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例.怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还 ...

  5. 设计模式之Template Method模式

    作用:将具体的处理交给子类 什么是Template Method模式? Template Method模式是指带有模板功能的模式,组成模板的方法被定义在父类中,且这些方法为抽象方法.子类去实现父类中的 ...

  6. 行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式

    1 模板方法(TEMPLATE METHOD)模式: 模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类.子 ...

  7. Template Method模式和Strategy模式有何异同

    Template Method模式和Strategy模式有何异同 博客分类: 设计模式 Java  Template Method模式很容易理解,就是由基类提供一个模板,将各子类中不变的行为提取到基类 ...

  8. 设计模式(三)Template Method模式

    在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式即模板方法模式. 根据下面的示例程序理解模板方法模式. package BigJunOba.bjtu.Te ...

  9. 一天一个设计模式——模板方法(Template Method)模式

    一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜 ...

  10. 行为型模式之Template Method模式

    模板方法模式(Template Method Pattern) 又叫模板模式,通过定义一个操作的算法骨架,而将一些步骤延迟到子类中,可以不改变一个算法的结构,却又可以重新定义概算法的某些特定步骤. 应 ...

随机推荐

  1. Lucas定理模板【bzoj2982】【combination】

    (上不了p站我要死了,侵权度娘背锅) Description LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样.那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ ...

  2. centos从头学习配置web服务器环境

    为了学习linux下配置web服务器环境,于是安装了vmware,准备在虚拟机里面学习web服务器的搭建! 首先是在虚拟机里安装centos,我选择的是32位的centos6.6版本,因为新版本7据说 ...

  3. Android-Binder 简析

    前言 对于Android来说,Binder的重要性怎么说都不为过.不管是我们的四大组件Activity.Service.BroadcastReceiver.ContentProvider,还是经常在应 ...

  4. 【微信】微信小程序 微信开发工具 创建js文件报错 pages/module/module.js 出现脚本错误或者未正确调用 Page()

    创建报错pages/module/module.js 出现脚本错误或者未正确调用 Page() 解决方法: 在js文件中添加 Page({ })

  5. 一个简单功能的SQL 实现

    1.假设有一张表示cj表 Name Subject Result 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 数学 92 李四 物理 89 要求查询结果: 姓名 语文 ...

  6. php设计模式之建造者模式

    建造者模式 建造者设计模式的目的是消除其他对象的复杂创建过程.使用建造者设计模式不仅是最佳的做法,而且在摸个对象的构造和配置方法改变时候,可以尽可能的减少重复更改代码. <?php /** *p ...

  7. Ext JS 5 gpl版本 官方原版的下载方法

    先进入官网: 然后在导航的Products中选择Sencha Ext JS,会看到以下页面: 这时候不要单击Download按钮,而是要单击导航中的DETAILS,页面切换后,就可在底部看到GPL版本 ...

  8. yarn 查看任务信息

    一.在命令行使用命令查看 (1)查看日志:yarn logs -applicationId application_1469094096026_26612 (2)查看状态:yarn applicait ...

  9. 转: java web demo的示例

    http://quqtalk.iteye.com/blog/360699 从事Java开发已经两年了,但是由于工作的关系,对Java Web还是个freshman.今天做了一个Java Web的简单D ...

  10. Linux Ubuntu下Dropbox图标消失

    Linux下的Dropbox是支持命令行模式的.,在terminal中输入dropbox后,如下提示: Dropbox command-line interface commands: Note: u ...