`

模板方法模式(Head first)

 
阅读更多

有人爱喝茶,有人爱喝咖啡,因为两者都含有咖啡因。

 

咖啡的冲泡方法:            茶的冲泡法:

1:把水煮沸                    1:把水煮沸

2:用沸水冲泡咖啡          2:用沸水浸泡茶叶

3:把咖啡倒进杯子          3:把茶倒进杯子

4:加糖和牛奶                4:加柠檬

 

 

观察上面的步骤发现第1步和第3步是一样的,可以将这两步抽象出来,放到上一层的抽象类中实现。

将第2步和第4步定义成抽象方法,由具体子类实现。最后在抽象类中定义一个方法,调用这4个方法。

 

 

package com.headfirst.chapter8;

public abstract class CaffeineBeverage {
	public void prepareRecipe(){
		boidWater();//烧水
		brew();//冲泡
		pourInCup();//倒进杯子
		addCondiments();//加调料
	}
	public void boidWater(){
		System.out.println("Boiling water");
	}
	public void pourInCup(){
		System.out.println("pour in cup");
	}
	abstract void brew();
	abstract void addCondiments();
}

 

 

泡茶继承了上面那个抽象类,实现了加调料和冲泡方法

 

package com.headfirst.chapter8;

public class Tea extends CaffeineBeverage{
	void addCondiments() {//加柠檬
		System.out.println("Add lemon");
	}
	void brew() {//用沸水浸泡茶叶
		System.out.println("Steep Tea Bag");
	}
}

 

 

咖啡也继承了上面那个抽象类,实现了加调料和冲泡方法 

 

package com.headfirst.chapter8;

public class Coffe extends CaffeineBeverage {

	void addCondiments() {//加入牛奶和糖
		System.out.println("add sugar and milk");
	}

	void brew() {//用沸水冲泡咖啡
		System.out.println("Dripping Coffee through filter");
	}
}
 

模板方法定义:

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

可以在模板方法中定义一个“钩子”

可以让子类有能力对算法的不同点进行挂钩,要不要挂钩,由子类决定。

例如可以在上面例子的抽象类中定义一个isCustomerWantsCondiments方法

默认返回true

子类可以覆盖这个方法,在超类的prepareRecipe方法中可以这样写

if(isCustomerWantsCondiments()){

  addCondiments();//加调料

}

 

模板方法主要用于框架的实现。

分享到:
评论

相关推荐

    Head First设计模式(完整高清版).pdf

    《Head First设计模式》是一本深受开发者喜爱的经典书籍,它以独特且易于理解的方式介绍了设计模式这一复杂的概念。设计模式是软件开发中的经验总结,是解决常见问题的有效模板,可以帮助我们编写更灵活、可维护和可...

    Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现

    模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...

    Headfirst设计模式中文高清PDF+附书源码

    《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...

    Head First设计模式和HeadFirst in java 源码以及23种设计模式关系图

    行为型模式涉及对象间的交互和责任分配,包括模板方法模式(Template Method)、观察者模式(Observer)、策略模式(Strategy)、职责链模式(Chain of Responsibility)、命令模式(Command)、迭代器模式...

    [中文]Head-First设计模式.pdf

    《Head-First设计模式》是一本面向初学者的优秀设计模式教程,主要针对Java编程语言。这本书通过易于理解的方式介绍了23种经典的GoF设计模式,帮助开发者提升代码的可复用性和可维护性。设计模式是软件工程中的重要...

    Head First Design Patterns 英文版 Head First设计模式

    行为型模式如策略(Strategy)、观察者(Observer)、装饰器(Decorator)和模板方法(Template Method)等,则关注对象间的行为协作。 每章结束时,书中还包含了要点整理和习题,帮助读者复习和巩固知识点。通过...

    HeadFirst设计模式PPT

    《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...

    Head First设计模式官方原码

    《Head First设计模式》是一本深受开发者欢迎的设计模式学习书籍,以其独特的教学方式,通过丰富的图解和幽默的语言,帮助读者深入理解设计模式的核心概念。这本书的官方源码提供了书中所讲解的每个设计模式的实际...

    HeadFirst设计模式JAVA版源码

    《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...

    《Head.First设计模式》书中源代码(Java语言)

    《HeadFirst设计模式》是设计模式领域的一本经典著作,以其独特的教学方式和生动的插图深受初学者喜爱。这本书通过实例和互动式的学习方法,深入浅出地讲解了23种经典的设计模式。源代码作为理论知识的实践部分,...

    HeadFirst设计模式英文版

    《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...

    headfirst设计模式

    《Head First设计模式》是一本深受开发者欢迎的设计模式教程,以其独特的视觉呈现方式和易于理解的语言,让初学者也能快速掌握设计模式的核心概念。这本书深入浅出地介绍了23种GOF(GoF,Gamma、Erich、Johnson、...

    Head First(Design Patterns) 设计模式英文原版

     8模板方法模式封装算法  9选代器与组合模式管理良好的集合  10状态模式事物的状态  11代理模式控制对象访问  12复合模式模式中的模型  13与设计模式相处真实世界中的模式  附录A:剩下的模式 ...

    Head First 设计模式 源代码

    9. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。源代码中可能会有一个抽象类,如BakeAbstractClass,它定义了基本的...

    HeadFirst Design Patterns深入浅出设计模式 英文PDF版

    《HeadFirst Design Patterns》是设计模式领域中一本非常受欢迎的入门书籍,以其独特的教学方式深受读者喜爱。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决常见问题的经验和方法,使得开发者...

    原版PPT和源码

    HeadFirst系列图书以其独特的视觉风格和轻松的教学方法而闻名,其设计模式一书也不例外。原版PPT可能包含了大量的图表、幽默的插图和互动元素,旨在帮助读者更轻松地理解和记忆各种设计模式。PPT通常会按照每种模式...

    Head First设计模式 C++代码实现

    《Head First设计模式 C++代码实现》是一本深入浅出介绍设计模式的书籍,它将复杂的概念用易于理解的方式呈现,特别适合初学者和有一定经验的C++开发者。设计模式是软件开发中的一种最佳实践,它总结了在特定场景下...

    Head First设计模式 源代码

    6. **学习方法**:《Head First设计模式》以轻松、非传统的方式讲解复杂概念,通过大量的图表、幽默的插图和实用的例子,让学习过程更加有趣和有效。 7. **面向对象设计原则**:设计模式通常基于一些核心的面向对象...

    Head First设计模式(含目录)

    《Head First设计模式》是一本深受程序员喜爱的书籍,它以独特的方式讲解了设计模式这一核心的编程概念。设计模式是软件开发中的经验总结,是解决常见问题的有效模板,可以帮助开发者编写可维护、可扩展、易理解的...

    HeadFirst设计模式源码

    《HeadFirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,它以易懂且生动的方式讲解了23种经典的设计模式。源码包包含了书中所有示例代码,这对于理解和实践这些设计模式至关重要。这里我们将详细探讨设计...

Global site tag (gtag.js) - Google Analytics