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

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

  • 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. SQL PARTITION BY:列值改变时重置计数

    现有数据如下: 需求:以科目为单位 对分数进行排序 SELECT *, ROW_NUMBER() OVER (PARTITION BY 科目 ORDER BY 分数 DESC) AS NUM FROM ...

  2. About Markdown -- 进入Markdown园子

    起初也就是打算简单一些Markdown在编辑Blog方面的一些常用操作和注意事项,没想到,一下没刹住,毫无防备地闯进了这个好趣的园子-. 1. 认识 Markdown HTML(HyperText M ...

  3. MySQL配置参数:wait_timeout

    作者:老王 如果你没有修改过MySQL的配置,缺省情况下,wait_timeout 的初始值是. wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性 ...

  4. SPCOMM控件对串口参数的设置

    对于串口来说,一般大家都了解波特率,校验码,数据位之类的参数.然而在实际的数据传输中,有些参数也会影响数据的传输.现总结如下,以便大家查询.在对串口进行编程时,可用portman对串口参数进行跟踪,提 ...

  5. Go -- 在Go语言中使用JSON struct

    Encode 将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error: func Marshal(v interface{}) ([]byte, error) ...

  6. windows下搭建svn服务器

    转自:http://www.cnblogs.com/cloud2rain/archive/2013/04/11/3015080.html 这篇文档非常好,转来学习,有一点就是把subversion创建 ...

  7. python的序列化

    参考:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868322157 ...

  8. CentOS6.4 安装 codeblocks-12.11

    FROM: http://blog.csdn.net/theegao/article/details/8750239 一.下载 1.   codeblocks-12.11-1.el6.x86_64.t ...

  9. 常见的Linux系统监控命令

      1.free 显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区 -b:以Byte为单位显示内存使用情况: -k:以KB为单位显示内存使用情况: -m:以MB为单位显示内存使 ...

  10. setlocal启动批处理文件中环境变量的本地化

    setlocal启动批处理文件中环境变量的本地化 在执行 SETLOCAL 之后所做的环境改动只限于批处理文件.要还原原先的设置,必须执行 ENDLOCAL. 学习了:https://baike.ba ...