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