模板模式(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. IntelliJ IDEA 编译代码报错 找不到符号 符号: 找不到符号包 包

    在使用IDEA的时候,经常出现过找不到包或者找不到符号的情况,可以尝试以下几种方式来解决 1.如果项目使用的是Maven可以使用Maven-Reimport 2.还可以 Invalidate and ...

  2. maven 插件2

    Maven is - at its heart - a plugin execution framework; all work is done by plugins. Maven 本质上就是一个插件 ...

  3. Android 开发第二步——建立文件

    先以Hello World工程为样板 启动AVD 但在编程过程中遇到了非常棘手的问题 等待下一期完成

  4. template.js 数据渲染引擎

    template.js 数据渲染引擎 template.js是一款JavaScript模板引擎,用来渲染页面的. 原理:提前将Html代码放进编写模板 <script id="tpl& ...

  5. 01.VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...

  6. leetcode540

    这道题目的要求,Note: Your solution should run in O(log n) time and O(1) space. 因此应该用二分查找的方式,代码如下: class Sol ...

  7. Ubuntu12.04 内核树建立

    先查看自己使用的内核版本 lin@lin-virtual-machine:~$ uname -r --generic 如果安装系统时,自动安装了源码.在 /usr/src 目录下有对应的使用的版本目录 ...

  8. H5自动准备杂记

    由于之前没做过UI自动化,近期准备做H5自动化,要学的东西还是很多. 1.本地debug环境:android studio + android SDK(想要调试通要关注:驱动.手机开发者模式要打开) ...

  9. ssh-keygen生成git ssh密钥

    title: ssh-keygen生成git ssh密钥 date: 2018-05-07 08:49:21 tags: [git,ssh-keygen] --- ssh-keygen生成git ss ...

  10. 网易云音乐api资料

    https://github.com/LanFD/music_163 网易云音乐常用API浅析:http://moonlib.com/606.html