模板方法模式
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
每一个子类都必须为模板方法中抽象的步骤提供完整的实现
抽象父类中可以使用钩子(hook),让子类决定是否需要执行某些步骤
茶与咖啡
抽象父类
package templateMethod; /** * 模板方法: * 定义了一个算法的步骤 * 允许子类为一个或多个步骤提供实现 */ public abstract class CaffeineBeverage { /** * 主导一切,拥有算法,并且保护整个算法 */ final public void prepare() { boliWater(); brew(); pourInCup(); //使用钩子,能够影响抽象类的算法流程 if(customerWantsCondiments()) { addCondiments(); } } /** * 一个钩子 * 父类中提供缺省的实现 * 子类可以根据需要重写钩子 * 注意:钩子方法不要修饰为private的! */ boolean customerWantsCondiments() { return true; } abstract void brew(); abstract void addCondiments(); void pourInCup() { System.out.println("Pouring into cup"); } void boliWater() { System.out.println("Boiling Water"); } }
具体子类-茶
package templateMethod; public class Tea extends CaffeineBeverage { @Override void brew() { System.out.println("Steeping the tea"); } @Override void addCondiments() { System.out.println("Adding Lemon"); } /** * 覆盖钩子,提供自己的功能 */ boolean customerWantsCondiments() { return false; } }
具体子类-咖啡
package templateMethod; public class Coffee extends CaffeineBeverage { @Override void brew() { System.out.println("Dripping Coffee through filter"); } @Override void addCondiments() { System.out.println("Adding Sugar and Milk"); } }
测试
package test; import templateMethod.CaffeineBeverage; import templateMethod.Coffee; import templateMethod.Tea; public class TemplateMethodTest { public static void main(String[] args) { CaffeineBeverage tea = new Tea(); tea.prepare(); System.out.println("\n==================\n"); CaffeineBeverage coffee = new Coffee(); coffee.prepare(); } }
相关推荐
模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...
8. **模板方法模式**(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 9. **命令模式**(Command):将请求封装为一...
《Head First Design Patterns》是一本深入浅出介绍设计模式的图书,由Eric Freeman、Elisabeth Freeman、Bert Bates和Kathy Sierra联合编写。本书结合认知科学原理和神经生物学研究,采用引导式教学方法,通过故事...
行为型模式涉及对象间的交互和责任分配,包括模板方法模式(Template Method)、观察者模式(Observer)、策略模式(Strategy)、职责链模式(Chain of Responsibility)、命令模式(Command)、迭代器模式...
《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...
《Head First设计模式》是一本深受开发者欢迎的设计模式教程,以其独特的视觉呈现方式和易于理解的语言,让初学者也能快速掌握设计模式的核心概念。这本书深入浅出地介绍了23种GOF(GoF,Gamma、Erich、Johnson、...
《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...
《Head First设计模式》是一本深受开发者欢迎的设计模式学习书籍,以其独特的教学方式,通过丰富的图解和幽默的语言,帮助读者深入理解设计模式的核心概念。这本书的官方源码提供了书中所讲解的每个设计模式的实际...
6. **学习方法**:《Head First设计模式》以轻松、非传统的方式讲解复杂概念,通过大量的图表、幽默的插图和实用的例子,让学习过程更加有趣和有效。 7. **面向对象设计原则**:设计模式通常基于一些核心的面向对象...
《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...
《Head First设计模式》是一本深受程序员喜爱的书籍,它以独特的方式讲解了设计模式这一核心的编程概念。设计模式是软件开发中的经验总结,是解决常见问题的有效模板,可以帮助开发者编写可维护、可扩展、易理解的...
《Head First 设计模式》是软件开发领域内一本广受欢迎的书籍,由Eric Freeman、Elisabeth Robson、Bert Bates和Kathy Sierra四位作者共同撰写。这本书以其独特的视觉风格和易于理解的教学方法,深入浅出地介绍了...
行为型模式则关注对象之间的交互和职责分配,如观察者模式(Observer)、模板方法模式(Template Method)、命令模式(Command)、迭代器模式(Iterator)、策略模式(Strategy)、状态模式(State)、访问者模式...
《Head First设计模式》是一本深受开发者欢迎的设计模式学习书籍,以其独特的教学方式,通过丰富的图解和幽默的叙述,使复杂的设计模式概念变得生动易懂。这本书主要讲解了面向对象设计中的23种经典设计模式,是软件...
《HeadFirst设计模式》是一本深受开发者喜爱的设计模式学习书籍,以其独特的教学方式,通过丰富的图解和幽默的语言,使得复杂的设计模式概念变得易于理解。这里我们拥有的是该书部分源码,这些代码是为了配合书中...
《Head First 设计模式》是软件开发领域内一本广受欢迎的书籍,它以直观易懂的方式介绍了23种经典的设计模式。这些模式是解决软件设计中常见问题的成熟方案,被广泛应用于Java、C++、Python等编程语言中。源代码提供...
《Head-First设计模式》是设计模式领域内一本广受欢迎的入门书籍,以其独特的视觉呈现方式和易懂的讲解风格,让初学者也能快速理解并掌握设计模式的精髓。设计模式是软件工程中的一种最佳实践,是解决常见编程问题的...
《HeadFirst设计模式》这本书是软件开发领域的一本经典之作,尤其对于初学者而言,它以易懂且生动的方式介绍了设计模式这一核心概念。设计模式是面向对象编程中的一种最佳实践,是解决常见问题的经验总结,是软件...
《Head First 设计模式》是一本深受欢迎的设计模式学习书籍,尤其适合初学者或需要深入理解设计模式的IT从业者。作者以独特的“头先”教学方式,将复杂的概念以易于理解的方式呈现,使得读者能够在轻松愉快的氛围中...