Java设计模式(七) 模板模式-使用钩子
1,模板类
package com.pattern.template;
public abstract class CaffeineBeverageWithHook {
	void prepareRecipe(){
		boilWater();
		brew();
		pourInCup();
		if(customerWantsCondiments()){
			addCondiments();
		}
	}
	abstract void brew();
	abstract void addCondiments();
	void boilWater(){
		System.out.println("Boiling water");
	}
	void pourInCup(){
		System.out.println("Pouring into cup");
	}
	boolean customerWantsCondiments(){
		return true;
	}
}
2,模板的子类实现类
package com.pattern.template; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; public class CoffeeWithHook extends CaffeineBeverageWithHook{ /**
* @see com.pattern.template.CaffeineBeverageWithHook#brew()
*/
@Override
void brew() {
System.out.println("Dripping Coffee through filter");
} /**
* @see com.pattern.template.CaffeineBeverageWithHook#addCondiments()
*/
@Override
void addCondiments() {
System.out.println("Adding Sugar and Milk");
} public boolean customerWantsCondiments(){
String answer = getUserInput(); if(answer.toLowerCase().startsWith("y")){
return true;
} else{
return false;
}
} private String getUserInput(){
String answer = null;
System.out.println("Would you like milk and sugar with your coffee (y/n)?"); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); try {
answer = in.readLine();
} catch (IOException e) {
System.out.println("IO Exception!");
} if(answer == null){
return "no";
}
return answer;
} }
3,测试类
package com.pattern.template;
public class BeverageTestDrive {
	public static void main(String[] args) {
		CoffeeWithHook coffeeHook = new CoffeeWithHook();
		System.out.println("\nMaking tea...");
		coffeeHook.prepareRecipe();
	}
}
4,输出结果:
Making tea...
Boiling water
Dripping Coffee through filter
Pouring into cup
Would you like milk and sugar with your coffee (y/n)?
y
Adding Sugar and Milk
Java设计模式(七) 模板模式-使用钩子的更多相关文章
- java设计模式之模板模式以及钩子方法使用
		1.使用背景 模板方法模式是通过把不变行为搬到超类,去除子类里面的重复代码提现它的优势,它提供了一个很好的代码复用平台.当不可变和可变的方法在子类中混合在一起的时候, 不变的方法就会在子类中多次出现, ... 
- 图解Java设计模式之模板模式
		图解Java设计模式之模板模式 豆浆制作问题 模板方法模式基本介绍 模板方法模式原理类图 模板方法模式解决豆浆制作问题 模板方法模式的钩子方法 模板方法模式在Spring框架中的源码分析 模板方法模式 ... 
- JAVA设计模式之模板模式
		在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ... 
- 13.java设计模式之模板模式
		基本需求: 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材.浸泡和放到豆浆机打碎这几个步骤对于制作每种口味 ... 
- Java设计模式之模板模式(Template )
		前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板 ... 
- Java设计模式之模板模式及使用场景
		模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义了模板,我们的剩余工作就是对其进行充实.丰润,完善它的不足之处. 定义模板采用抽象类 ... 
- 折腾Java设计模式之模板方法模式
		博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ... 
- python设计模式之模板模式
		python设计模式之模板模式 编写优秀代码的一个要素是避免冗余.在面向对象编程中,方法和函数是我们用来避免编写冗余代码的重要工具. 现实中,我们没法始终写出100%通用的代码.许多算法都有一些(但并 ... 
- Java设计模式——装饰者模式
		JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ... 
- 浅析JAVA设计模式之工厂模式(一)
		1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ... 
随机推荐
- GitHub注册流程(中英对比)
			GitHub注册流程(中英对比) 注明:为方便完成注册,将以中英文网页截图对应展示. 1. 注册邮箱: 点击GitHub官网进行邮箱注册. 2. 制定个人计划: 页面跳转至 ... 
- NOIP2000进制转换
			题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^ ... 
- MarshalAs属性指示如何在托管代码和非托管代码之间封送数据。
			http://blog.csdn.net/tianyu0910/article/details/6260755 http://blog.sina.com.cn/s/blog_4e4ee8ed0100e ... 
- EF的入门使用 (电影管理)
			控制器代码: public class HomeController : Controller { private NewDBContext ndc = new NewDBContext(); pub ... 
- HTML-学习笔记(常用标签)
			本篇博客讲一讲HTML中的标签 HTML 标题 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的.<h1> 定义最大的标题.<h6> ... 
- 阿里云日志api创建logStore
			, shardCount = }); string date = FormatRfc822Date(time); string con ... 
- Apache配置中的ProxyPass 和 ProxyPassReverse
			apache中的mod_proxy模块用于url的转发,即具有代理的功能.应用此功能,可以很方便的实现同tomcat等应用服务器的整合,甚者可以很方便的实现web集群的功能. 例如使用apache作为 ... 
- Basic: Fisher's transform
			来源:http://bbs.chinahrd.net/thread-709742-1-1.html,Kenneth的回答. z = 0.5 * ln [ (1+r)/(1-r) ]" C0 ... 
- AngularJS+Node的RESTful之基本实现
			欢迎大家指导与讨论 : ) 一.前言 本文主要讲述RESTful在node端与AngularJS两端配合的基本实现方法,为了尽量做到大家易看易懂,因此文章也没有深入探讨(其实是小鹏我只学到目前这些 - ... 
- wap页面笔记
			wap页面是自行应页面 必须在head中加入 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1 ... 
