三、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(模板模式) 作为一个曾经爱好写文章,但是不太懂得写文章的人,我必须承认,开头是个比较难的起步. 模板模式常规定义:模板模式定义了一个算法步骤,把实现延迟到子类. 事实上模板模 ...
随机推荐
- vnc操作指南
启动 vncserver : vncserver : -geometry 1905x1005 停止: ps aux | grep vnc kill pid 或者 vncserver -
- 《算法》第四章部分程序 part 8
▶ 书中第四章部分程序,包括在加上自己补充的代码,图中找欧拉路径 ● 无向图中寻找欧拉路径,只注释了与欧拉环不同的地方 package package01; import edu.princeton. ...
- Kettle入门
kettle 水壶 正如其名“水壶”,将各个地方的水倒进水壶里,再用水壶倒入不同的容器. 勺子-Spoon.bat/spoon.sh 图形界面工具,就是启动上图主界面的命令行. ketchen 厨房 ...
- spark 常用技巧总结2
zip拉链操作 def zip[U](other: org.apache.spark.rdd.RDD[U])(implicit evidence$10: scala.reflect.ClassTag[ ...
- exe加载DLL的时候会有一系列的搜索路径
假如安全DLL搜索模式启用,搜索顺序如下: 1. 应用程序所在的路径 2. Windows SYSTEM目录.通过调用GetSystemDirectory函数可以获取这个目录的路径. 3. 16位系统 ...
- shell执行class或jar
mc11>java -cp /home/ap/user/webproject/web.war/WEB-INF/lib/*:. com.userpackage.ExcelDemo 说明:/home ...
- arguments.callee 和 caller
arguments arguments它是一个类数组对象,包含着传入函数中的所有参数.虽然 arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指 ...
- delphi java 日期 转换 获取Unix时间戳
获取Unix时间戳 http://www.cnblogs.com/findumars/p/4716753.html 最简单准确一句话 Result:=IntToStr( DateTimeToUnix ...
- AIR程序调用本地默认应用程序打开本地文件
当我用下面语句的时候,可以成功打开桌面文件夹下面的文件: var file:File = File.desktopDirectory.resolvePath("test.jpg") ...
- Spring注解标签详解@Autowired @Qualifier等
http://blog.csdn.net/wangsr4java/article/details/42777855 @Component.@Repository.@Service.@Controlle ...