三、Template 模板模式
模板模式(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 模板模式的更多相关文章
- Template(模板)模式
第三章:模板模式 Template模式比较简单,是基于继承关系的一种设计模式,由父类定义处理流程框架,由子类中实现具体处理. Code: package example.template; /*** ...
- 设计模式之——Template模板模式
Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的 ...
- 跟我一起透彻理解template模板模式
#include <iostream> using namespace std; //template模式. class Base { public: void DealWhat() { ...
- java设计模式(三)模板模式
抽象类中公开定义了执行它的方法的方式,子类可以按需求重写方法实现,但调用将以抽象类中定义的方式进行,典型应用如银行办理业务流程.冲泡饮料流程.下面给出简单例子,用沸水冲泡饮料,分为四步:将水煮沸.泡制 ...
- Spring中常见的设计模式——模板模式
一.模板模式的应用场景 模板模式又叫模板方法模式(Template Method Pattern),指定义一个算法的骨架,并允许自雷为一个或者多个步骤提供实现.模板模式使得子类可以在不改变算法结果的情 ...
- django基础2: 路由配置系统,URLconf的正则字符串参数,命名空间模式,View(视图),Request对象,Response对象,JsonResponse对象,Template模板系统
Django基础二 request request这个参数1. 封装了所有跟请求相关的数据,是一个对象 2. 目前我们学过1. request.method GET,POST ...2. reques ...
- 《JAVA设计模式》之模板模式(Template)
在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...
- Java设计模式之模板模式(Template )
前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板 ...
- 模板模式(Template)
行为型:Template(模板模式) 作为一个曾经爱好写文章,但是不太懂得写文章的人,我必须承认,开头是个比较难的起步. 模板模式常规定义:模板模式定义了一个算法步骤,把实现延迟到子类. 事实上模板模 ...
随机推荐
- 13.App爬取相关库的安装(Charles,Mitmproxy,Appium)
由于App没有像浏览器一样直观的后台请求工具,主要用一些抓包技术抓取数据.(目前也在学习安装,参考书籍.) 首先呢,一些简单的接口通过Charles或mitmproxy分析,找出规律,直接用程序去抓取 ...
- TCP/UDP模型
1网络接口层 MAC地址2网络互联层 IP地址3传输层 TCP/UDP端口号4应用层 应用层协议
- mongo admin 客户端管理工具安装
Ubuntu14.04 1. 选择安装的目录cd /home/sea2. git clone https://github.com/mrvautin/adminMongo.git && ...
- Linux 创建用户并赋予 Sudo 权限
01,创建账号 => useradd admin 02,赋予密码 => passwd admin 03,修改 sudo 权限文件,使得该用户可以使用 sudo 命令 vim /etc/su ...
- template.js 数据渲染引擎
template.js 数据渲染引擎 template.js是一款JavaScript模板引擎,用来渲染页面的. 原理:提前将Html代码放进编写模板 <script id="tpl& ...
- leetcode149
/* * A line is determined by two factors,say y=ax+b * * If two points(x1,y1) (x2,y2) are on the same ...
- java自定义抛出的异常Exception
package com.zhanzhuang.exception; public class CustomizeException { public static void main(String[] ...
- mui init 出现无法引入子页面问题
1. 检查项目中是否重复出现了 mui.init() 函数; mui.init({ subpages: [{ styles: { // top: "44px", top: &quo ...
- cin.tie与sync_with_stdio加速输入输出
在LeetCode上练习习题的时候每次AC之后都会去看别人的代码,几乎每次都能遇到cin.tie与sync_with_stdio.类似这样: static auto x = [](){ std::io ...
- 6.5 Shell 算术计算
6.5 Shell Arithmetic shell允许在其内计算表达式,可以通过以下方式使用:((中,let和带-i选项的declare命令中. 只能计算固定长度的整数,而且不会检查溢出,除0可以捕 ...