`

设计模式——模板方法模式

 
阅读更多

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

模板方法定义了一个算法的步骤,并允许子类为每一个或多个步骤提供实现。

具体有以下使用经验:
    1  父类中的模板方法不可以被重写,拥有算法并且保护这个算法(声明为final)。
    2  可以代码复用最大化。
    3  抽象父类方法专注在代码本身,而由子类提供完整的实现。由框架控制如何做事情,而使用框架的人只需要指定框架算法中的一些细节。
    4  hook 钩子。父类中的一个方法,用来控制是否执行某段算法。返回值为boolean。
    5  好莱坞原则  父类对子类说“别调用我们,我们会调用你”。两个类之间切忌相互调用。原则:底层组件(例如子类)可以参与计算,但是高层组件(例如父类)何时以及如何调用底层组件,底层组件绝对不可以直接调用高层组件。
     代码:

抽象的父类:

//一个抽象的父类
public abstract class CaffeinBeverage {
	//这个是我们的模板方法,定义了一个算法模板:用来制作饮料
	//模板方法定义了算法,也即这几个方法的实现过程
   public final void prepareRecipe() {    //recipe 食谱,配方   不能重写了
		boilWater();   		
		brew();
		pourInCup();
		if(condimentHook()){
			addCondiments();
		}
	}//模板实际就是一个方法

    //这两个方法需要子类来实现
    abstract void addCondiments() ;
	abstract void brew() ;

	//冲水和倒入杯子 由父类实现
	private void pourInCup() {
		System.out.println("==倒入杯子==");
	}

	private void boilWater() {
		System.out.println("==把水煮沸==");
	}
	public boolean condimentHook(){   //钩子,用来控制是否执行某段算法(一段代码)
		return true;					//开关
	}
}


 子类一:

import java.util.Scanner;

public class TeaHook extends CaffeinBeverage {
	private Scanner scanner;

	@Override
	void addCondiments() {
		System.out.println("==添加柠檬==");
	}
	@Override
	void brew() {
		System.out.println("==放入茶叶==");
	}
	public TeaHook() {
		super();
	}
	@Override
	public boolean condimentHook() {
		System.out.println("是否添加柠檬?y or n");
		scanner = new Scanner(System.in);
		char input = scanner.nextLine().charAt(0);
		if(input == 'y'){
			return true;
		}else {
			return false;
		}
	}
}


 子类二:

import java.util.Scanner;

public class CoffeeHook extends CaffeinBeverage{
	private Scanner scanner;
	
	@Override
	void addCondiments() {
		System.out.println("==添加牛奶和糖==");
	}

	@Override
	void brew() {
		System.out.println("==放入咖啡==");
	}

	@Override
	public boolean condimentHook() {
		System.out.println("是否添加牛奶和糖?y or n");
		scanner = new Scanner(System.in);
		char input = scanner.nextLine().charAt(0);
		if(input == 'y'){
			return true;
		}else {
			return false;
		}
	}
}


 测试:

public class MainTest {
	public static void main(String[] args) {
		TeaHook teaHook = new TeaHook();
		CoffeeHook coffeeHook = new CoffeeHook();
		
		System.out.println("泡一杯茶:");
		teaHook.prepareRecipe();
		
		System.out.println("泡一杯咖啡:");
		coffeeHook.prepareRecipe();
	}
}

 

0
0
分享到:
评论

相关推荐

    python 模板方法模式(示例)

    设计模式——模板方法模式模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤使用场景:当不变和可...

    设计模式——GFour

    《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...

    Python设计模式之模板方法模式实例详解

    本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下: ...设计模式——模板方法模式 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子

    设计模式——刘伟

    设计模式并不是具体的代码或库,而是一种经验总结,是软件开发人员在长期实践中形成的通用解决方案的模板。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。单例模式常用于控制资源的共享,如...

    设计模式

    在本文中,我们将重点讨论一种常见的设计模式——模板方法模式。 模板方法模式属于行为设计模式,它在对象的算法骨架固定,但部分步骤可变的情况下非常有用。这种模式定义了一个操作中的算法框架,并允许子类在不...

    设计模式——原版的设计模式

    设计模式是一种在软件设计中被广泛认可的解决特定问题、经过良好记录并可重用的解决方案。它们代表了在各种编程环境中反复出现的问题的最佳实践。原版的设计模式通常指的是最初由“Gang of Four”(GoF)在他们的...

    论文研究-设计模式在GeoMediaWebMap地图数据发布中的应用.pdf

    在文档中提到的两种设计模式——模板方法模式和策略模式——都是行为型设计模式。模板方法模式定义了一个操作中的算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法...

    设计模式-模板方法模式ppt

    ### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...

    设计模式-Java语言中的应用(pdf)

    《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...

    数据库访问层的实现(一)——模板方法模式

    本篇文章将探讨如何利用设计模式中的模板方法模式来实现数据库访问层,以简化开发工作。 模板方法模式是一种行为设计模式,它定义了算法的骨架,并允许子类在不改变算法结构的情况下,对特定步骤进行重定义。在...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

    设计模式——简单工厂 VS 工厂方法

    在软件设计领域,设计模式是解决常见问题的模板,它们为开发者提供了标准的解决方案,以提高代码的可读性、可维护性和复用性。本文将深入探讨两种常见的工厂模式:简单工厂模式和工厂方法模式。 简单工厂模式,也...

    Java设计模式——代理设计模式(静态代理和动态代理)

    在Java编程中,设计模式是一种解决常见问题的模板或最佳实践,它可以帮助开发者编写更加灵活、可维护和可扩展的代码。代理设计模式是其中的一种,它的主要作用是在不修改原有对象的基础上,为对象添加额外的功能或者...

    设计模式——JAVA.docx

    ### JAVA设计模式总结之23种设计模式及六大原则 #### 一、设计模式之六大原则 ##### 总原则:开闭原则(Open Close Principle) 开闭原则是设计模式中最核心的原则之一,它强调的是软件实体(类、模块、函数等)...

    设计模式——可复用面向对象软件的基础(3)

    《设计模式——可复用面向对象软件的基础》是IT领域中的经典著作,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师合著,他们因此被誉为GoF(Gang of Four)。这本书提出了面向对象设计的23种...

    11.设计模式-模板方法模式1

    模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...

    如何向妻子解释OOD和设计模式——桥接模式

    在OOD中,设计模式是一种解决常见问题的模板,它是在特定上下文中经过验证的解决方案。设计模式不是具体的代码,而是一种通用的、可复用的设计方案,描述了在特定情况下,如何将对象和类组织在一起以解决特定问题。...

    c#代码介绍23种设计模式-14模板方法模式(附代码)

    在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义 1. 模板方法模式的定义 模板方法模式——在一个抽象类中定义...

Global site tag (gtag.js) - Google Analytics