"围观"设计模式(18)--行为型之模板方法模式(TemplateMethod Pattern)

模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。----WIKIPEDIA

个人理解

模板方法模式相对而言比较简单,一般的都是由抽象类定义好模板方法,然后,子类通过继承并实现其父类中定义好的模板中需要执行的具体的方法,调用子类对象的模板方法时,会执行该类中的具体实现的方法。这个模式我个人的感觉有点像是面向过程的操作,执行完一道工序,接着下一道工序。

案例解析

模板方法相对来说比较简单,这里只列举一个例子供大家参考下。

场景介绍:汽车,无非是启动、开路、停车,就这几部,对于这样的流程基本上固定的行为我们可以考虑采用模板方法模式来进行设计。

类的结构图

主要代码

抽象类

public abstract class Car {

	public abstract void startUp();
	public abstract void run();
	public abstract void stop();

	public void templateMethod(){
		this.startUp();
		this.run();
		this.stop();
	}
}

实现类

public class BYDCar extends Car{

	@Override
	public void startUp() {
		System.out.println("BYDCar 启动!");
	}

	@Override
	public void run() {
		System.out.println("BYDCar 跑起来!");
	}

	@Override
	public void stop() {
		System.out.println("BYDCar 停止!");
	}

}
public class HongQiCar extends Car{

	@Override
	public void startUp() {
		System.out.println("HongQiCar 启动!");
	}

	@Override
	public void run() {
		System.out.println("HongQiCar 跑起来!");
	}

	@Override
	public void stop() {
		System.out.println("HongQiCar 停止!");
	}

}

测试类

public class MainTest {

	public static void main(String[] args) {
		HongQiCar hongQiCar = new HongQiCar();
		BYDCar byd = new BYDCar();
		hongQiCar.templateMethod();
		byd.templateMethod();
	}
}

模板方法模式优点

1. 封装不变部分,扩展可变部分:把认为不变的部分封装到父类去实现,可变的部分可以通过继承来继续扩展。

2. 提取公共部分代码,便于维护。

3. 行为由父类控制,子类实现,基本方法时由子类实现的,因此子类可以通过扩展的方式增加相应的功能,符合开闭原则。

模板方法模式缺点

模板方法模式颠倒了阅读顺序,我们要想知道子类中模板方法的执行顺序需要去父类中查看,复杂的项目中造成代码阅读的难度。

模板方法模式使用场景

1. 多个子类有共有的方法,并且逻辑基本上相同的时候。

2. 重构,将相同的代码抽取到父类中。

源码下载

源码下载地址

推荐阅读

"围观"设计模式(16)--结构型之组合模式(Composite Pattern)

"围观"设计模式(17)--结构型之享元模式(Flyweight Pattern)

时间: 2024-08-29 04:55:19

"围观"设计模式(18)--行为型之模板方法模式(TemplateMethod Pattern)的相关文章

"围观"设计模式(19)--行为型之观察者模式(Observer Pattern)

观察者模式是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实时事件处理系统.----WIKIPEDIA 个人理解 观察者模式,就是使得被观察者中持有观察者的对象实例,在发生某些事件的时候,通过notify"通知"观察者,完成相应的操作,他也叫作发布-订阅模式,定义对象间一对多的依赖关系,使得被观察者对象产生动作,即可通知其依赖的对象该被观察者发生了变更. 案例

"围观"设计模式(9)--创建型之创建者模式(Builder Pattern)

生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象.----WIKIPEDIA 个人的理解: 建造者模式可以设置不同的属性或者行为,创建出不一样的对象.比如说生产汽车,假如有三个重要的工序,塑形.拼装.上色.那么可以通过创建者模式来设置,这三道工序中不同的车来说,三道工序可能就是不一样的.通过创建者模式来创建出对象的表现形式也自然就不一样.

"围观"设计模式(10)--创建型之原型模式(Prototype Pattern)

原型模式是创建型模式的一种,其特点在于通过"复制"一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的"原型",这个原型是可定制的. 原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效:或者创建值相等,只是命名不一样的同类数据.----WIKIPEDIA 首先看下面这样的一个例子,使用本人自黑一下,实现Clonable接口然后实现它的clone的方法,然后通过该方法对这个对象进行克隆.看是不是像我们

"围观"设计模式(27)--行为型之解释器模式(Interpreter Pattern)

解析器是一种按照规定的语法进行解析的例子,在现在的项目中使用较少,定义如下:给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器用于解释语言中的句子. 个人理解 解释器模式在项目中很少使用,因为他会引起效率.性能以及维护等问题,准备使用该模式时可以考虑开源框架如:Expression4J.MESP.Jep等.解释器模式一般用来解析比较标准的字符集,比如说SQL语法分析等. 解释器角色 解释器模式主要包含如下几个角色: AbstractExpression: 抽象表达式.声明一个抽象的

"围观"设计模式(26)--行为型之备忘录模式(Memento Pattern)

所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态. 个人理解 备忘录模式是用于将对象的状态暂存在某些特殊情况下可以将其进行恢复的模式,可以通过多种方式实现,包括clone以及一般方式以及多种参数的备忘录等形式.标准的备忘录在项目中很难直接应用进去,多数为其变形后的处理方式. 备忘录模式角色 备忘录模式主要包含入下几个角色: Originator: 原发器.负责创建一个备忘录,用以记录当前对象的内部状态,通过也可以

"围观"设计模式(22)--行为型之职责链模式(Chain Of Responsibility Pattern)

责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象.每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象.该模式还描述了往该处理链的末尾添加新的处理对象的方法.----WIKIPEDIA 个人的理解 责任链模式用到了链表的数据结构,存在一定的次序性,A->B->C这样的一条链表,在责任链模式中,请求交给A进行处理,如果A处理不了交给B,B如果处理的了进行处理,否则交给C处理,模式的关键在于构建这样的一个链表

"围观"设计模式(31)--行为型设计模式总结(模板、观察者、策略、状态、责任链、命令、访问者、中介者、备忘录、解释器)

设计模式源代码下载 设计模式源代码下载 1  模板方法模式 模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式.让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤.----WIKIPEDIA 个人理解 模板方法模式相对而言比较简单,一般的都是由抽象类定义好模板方法,然后,子类通过继承并实现其父类中定义好的模板中需要执行的具体的方法,调用子类对象的模板方法时,会执行该类中的具体实现的方法.这个模式我个人的感觉有点像是面向过程的操作,执行完一道工序,接着下一道工序.

"围观"设计模式(29)--创建型设计模式总结(单例、工厂、原型、创建者)

设计模式源码下载地址 设计模式源码下载地址 1  单例模式 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概

设计模式(行为型)之模板方法模式(Template Method Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之命令模式(Command Pattern)>http://blog.csdn.net/yanbober/article/details/45500113 概述 模板方法模式是一种基于继承的代码复用,它是一种类行为型模式:是结构最简单的行为型设计模式,在其结构