声明
本人写此文章只是为了梳理知识、更好的学习,基本内容来源于课本《软件架构与模式》,若有错误还请指正,此外会借鉴一些优秀的文章,网址放在文末,若有侵权可告知我删除。
一、行为模式
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) - 最易懂的设计模式解析.
我暂时不理解,以后补充 ↩︎