设计模式之行为模式中的模板方法模式(template method)

声明

本人写此文章只是为了梳理知识、更好的学习,基本内容来源于课本《软件架构与模式》,若有错误还请指正,此外会借鉴一些优秀的文章,网址放在文末,若有侵权可告知我删除。

一、行为模式

1、行为模式描述了通过对象间的合作形成的一种关系。
2、行为模式可以区分为基于类的行为模式和基于对象的行为模式。基于类的行为模式通过继承得到所希望的静态行为(如模板方法模式)。基于对象的行为模式可以使用里氏代换原则,在运行时通过提替换对象修改行为(动态修改行为的例子是策略模式)。
3、行为模式研究的是类或对象之间的合作与任务分工,它描述的是对象间的交互。

二、模板方法模式

模板方法模式在基类中确定算法的结构,通过静态继承的子类实现算法中变化的部分。
模板方法模式前提是多个工作步骤以相似的方法分派在多个类中。

三、实例

概况描述

某人到达旅游地点,要给朋友和老板分别寄明信片,明信片的基本内容一致而细节不同,此时,基本内容就是基类中确定的模板,细节就是子类中的实现的可变化部分。

代码

基本内容:

abstract public class Postcard
{
	final public void writeCard() //注意是final,子类无法覆盖
	{
		greet();
		text();
	}
	private void greet() //开头语是一样的,基类中直接实现
	{
		System.out.println("我顺利到达了旅游目的地,这里很漂亮。");
	}
	abstract protected void text(); //细节文字是不同的,需要子类实现
}

给朋友的明信片细节:

public class ToFriend extends Postcard
{
	public void text()
	{
		System.out.println("我会给你分享很多照片。");
	}
}

给老板的明信片细节:

public class ToBoss extends Postcard
{
	public void text()
	{
		System.out.println("我可以放松心情高效率工作。");
	}
}

主类测试:

public class Test{
	public static void main(String args[]){
		System.out.println("给朋友的明信片:");
		ToFriend friend = new ToFriend();
		friend.writeCard();
		System.out.println("给老板的明信片:");
		ToBoss boss = new ToBoss();
		boss.writeCard();
	}
}

运行结果

给朋友的明信片:
我顺利到达了旅游目的地,这里很漂亮。
我会给你分享很多照片。
给老板的明信片:
我顺利到达了旅游目的地,这里很漂亮。
我可以放松心情高效率工作。

优点

即使在基类中调用了插入方法,而插入方法是在子类中实现的,基类也不会依赖子类。模板方法模式可以实现依赖倒置1
算法已经在基类中大致确定,而基类不需要了解子类如何具体实现。所以子类就有了发挥的余地。
模板方法保证了高度的复用性。子类使用继承的模板方法中的算法,而不需覆写它。

类似的模式

策略模式。

优秀文章

此文章中的例子很好懂
模板方法模式(Template Method) - 最易懂的设计模式解析.


  1. 我暂时不理解,以后补充 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值