模板模式(Template Method)

场景: 在设计一个系统时,知道了算法所需的步骤,而且确定了这些步骤的执行顺序,但是步骤的具体实现还未知,或者说步骤的实现与具体的环境相关。

模板方法模式定义: 定义一个操作的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变算法结构的情况下重定义该算法的某些特定步骤,它是一种类行为型模式。

优点如下

1.封装了不变的部分,扩展可变的部分。把认为不变的部分封装到父类i中实现,而把可变的部分算法由子类实现。

2.它在父类中提取了公共部分的代码,便于代码复用

3.部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则

缺点如下

1.对每个不同的实现都需要定义一个子类,会导致类的数量增加,系统更加庞大,设计更加抽象

2.父类中的抽象方法由子类实现,子类执行的结构会影响到父类的结构,这导致一种反向的控制结构,提高代码阅读难度

设计模式结构:

1.抽象类:负责一个算法的轮廓与骨架,由一个模板方法和若干个基本方法

2.具体的子类:实现抽象类的抽象方法

例如:

起床:吃饭、喝水、工作

人与狗狗是不一样的,则实现如下:

 代码实现:

public abstract class WakeUp {

    public abstract  void  eat();
public abstract void dreak();
public abstract void work(); public void doSomething(){
eat();
dreak();
work();
}
}
public class PeopleWakeUp extends WakeUp {
@Override
public void eat() {
System.out.println("人吃饭");
} @Override
public void dreak() {
System.out.println("人喝啤酒");
} @Override
public void work() {
System.out.println("人要上班去了");
}
}
public class DogWakeUp extends WakeUp{
@Override
public void eat() {
System.out.println("狗狗吃狗粮");
} @Override
public void dreak() {
System.out.println("狗狗要喝水");
} @Override
public void work() {
System.out.println("狗狗负责看家");
}
}

客户端:

public class Client {
public static void main(String []args){
WakeUp people = new PeopleWakeUp();
people.doSomething(); WakeUp dog = new DogWakeUp();
dog.doSomething();
}
}

测试结果:

三、Template 模板模式的更多相关文章

  1. Template(模板)模式

    第三章:模板模式 Template模式比较简单,是基于继承关系的一种设计模式,由父类定义处理流程框架,由子类中实现具体处理. Code: package example.template; /*** ...

  2. 设计模式之——Template模板模式

    Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的 ...

  3. 跟我一起透彻理解template模板模式

    #include <iostream> using namespace std; //template模式. class Base { public: void DealWhat() { ...

  4. java设计模式(三)模板模式

    抽象类中公开定义了执行它的方法的方式,子类可以按需求重写方法实现,但调用将以抽象类中定义的方式进行,典型应用如银行办理业务流程.冲泡饮料流程.下面给出简单例子,用沸水冲泡饮料,分为四步:将水煮沸.泡制 ...

  5. Spring中常见的设计模式——模板模式

    一.模板模式的应用场景 模板模式又叫模板方法模式(Template Method Pattern),指定义一个算法的骨架,并允许自雷为一个或者多个步骤提供实现.模板模式使得子类可以在不改变算法结果的情 ...

  6. django基础2: 路由配置系统,URLconf的正则字符串参数,命名空间模式,View(视图),Request对象,Response对象,JsonResponse对象,Template模板系统

    Django基础二 request request这个参数1. 封装了所有跟请求相关的数据,是一个对象 2. 目前我们学过1. request.method GET,POST ...2. reques ...

  7. 《JAVA设计模式》之模板模式(Template)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  8. Java设计模式之模板模式(Template )

    前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板 ...

  9. 模板模式(Template)

    行为型:Template(模板模式) 作为一个曾经爱好写文章,但是不太懂得写文章的人,我必须承认,开头是个比较难的起步. 模板模式常规定义:模板模式定义了一个算法步骤,把实现延迟到子类. 事实上模板模 ...

随机推荐

  1. 18.纯 CSS 创作 404 文字变形为 NON 文字的交互特效

    原文地址:https://segmentfault.com/a/1190000014818274 感想: positon:absolute  和 :hover HTML代码: <!-- < ...

  2. angular.js前端分层开发(页面和js代码分离,并将js代码分层)

    一. 抽取模块成base.js文件// 定义模块: var app = angular.module("eshop",['pagination']); 二. 抽取服务成brandS ...

  3. nodejs操作monggodb数据库封装

    var MongoClient=require('mongodb').MongoClient; var DbUrl='mongodb://localhost:27017/productmanage'; ...

  4. windows 运行hadoop的WordCount报nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)

    window eclipse连接hadoop集群,本地运行wordcount,报以下错误,尝试网络上的方法无果,如:换64JDK,添加hadoop_home,path,以及在hadoop\bin和c: ...

  5. Linux 磁盘管理(分区、创建文件系统、挂载)

    Linux设备文件可以分为两类 b : 按块为单位,随机访问设备(块设备文件)  如:硬盘 c : 按字符为单位,线性设备(字符设备文件)  如:键盘 设备文件位于/dev下 主设备号(major n ...

  6. F1026 File not found DockForm.dcu

    xe6 [dcc32 Fatal Error] ToolsAPI.pas(18): F1026 File not found: 'E:\...\DockForm.dcu' delphi,xe6,包含了 ...

  7. 爬虫--Scrapy-持久化存储操作

    总体概况 持久化存储操作: a. 磁盘文件 a) 基于终端指令 i. 保证parse方法返回一个可迭代类型的对象(存储解析到的页面内容) ii. 使用终端指令完成数据存储到制定磁盘文件中的操作 1. ...

  8. APP-2-Hbuilder开发环境搭建

    1.Hbuilder下载 http://www.dcloud.io/hbuilderx.html 2.夜神模拟器下载 https://www.yeshen.com/ 3.chrome浏览器下载 htt ...

  9. cxgrid合并值相同的某列

    设置 cxGrid 的某列的 CellMerging 属性可使这一列相同值的单元格合并. 1)cxGridDBTableViewColumn1.Options.CellMerging:=true  2 ...

  10. python的垃圾回收机制【转】

    http://python.jobbole.com/82061/ http://www.jianshu.com/p/1e375fb40506 https://www.cnblogs.com/vamei ...