"围观"设计模式(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)



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值