23种java设计模式之模板模式
说实话,我们学的框架其实就是模板,是不是这样引出话题就能很快理解模板模式呢,好了,下面我们用一个经典的泡咖啡,泡茶案例来说明模板模式。
泡咖啡步骤:水烧开--->冲泡咖啡粉--->把咖啡倒入杯子--->加糖和牛奶
泡茶步骤:水烧开--->冲泡茶叶--->把茶水导入杯子--->加柠檬
对于传统方法来思考,给一个HotDrinkHook超类,然后给出每个步骤的抽象类,让子类Coffee和Tea去完成,但是,有没有考虑到这泡咖啡和泡茶两者是否有共同点呢?比如第一个步骤和第三个步骤,完全一样嘛,所以,我们可以用模板模式来解决这个问题。
我们先给出分析类图:
给出超类HotDrinkHook:
public abstract class HotDrinkHook {
public final void Prepare(){
//烧水
BoilWater();
//泡(茶、咖啡)
Brew();
//倒进杯子
PutInCup();
//加配料
if(wantAddCondiments()){
AddCondiments();
}else{
System.out.println("不用了,谢谢!!!");
}
}
public boolean wantAddCondiments() {
//默认为需要添加
return true;
}
public abstract void AddCondiments();
private void PutInCup() {
System.out.println("把做好的倒入杯子!!!");
}
public abstract void Brew();
private final void BoilWater() {
System.out.println("把水烧开!!!");
}
}
对于那两个相同的方法我们用final来修饰,保证后面的子类也是按照这个方法,然后对于不同的方法我们用抽象方法写出,让子类自己去实现,这里我们还给出了第四步,让顾客自己选择是否加配料
CoffeeHook 子类:
public class CoffeeHook extends HotDrinkHook {
public void AddCondiments() {
System.out.println("加入咖啡!!!");
}
public void Brew() {
System.out.println("泡咖啡!!!");
}
public boolean wantAddCondiments() {
System.out.println("您是否要添加调味品(y/n):");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str="";
try {
str=br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
if(str.equals("n")){
return false;
}
return true;
}
}
对于TeaHook就是两个方法不同,别的和CoffeeHook一样:
public void AddCondiments() {
System.out.println("加入柠檬!!!");
}
public void Brew() {
System.out.println("泡茶!!!");
}
最后测试Test:
public class Test {
public static void main(String[] args){
TeaHook teaHook=new TeaHook();
CoffeeHook coffeeHook=new CoffeeHook();
teaHook.Prepare();
coffeeHook.Prepare();
}
}
这样就可以满足条件了。
总结:
模板模式:模板模式:封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现
通俗讲模板模式是这个算法或者说这个步骤是final的,不变的,保证了后面的子类也是按照这个算法做的,然后子类里面只要关系抽象函数的实现,不用关系步骤什么的,所以子类里面关心的东西就少多了,同时它把东西放在超类后,整个体系要改的话,只要在超类里改就行了,所以一定程度上对于维护,拓展,集中管理,更好维护。
23种java设计模式之模板模式相关推荐
- 研磨23种大话设计模式------简单工厂模式 + 工厂方法模式 + 抽象工厂模式
大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文 get 到有用的干货知识,请帮忙点个赞呗,据说点赞的都拿到了offer 简 ...
- Java设计模式之模板模式【通过LOL选英雄案例】
初衷 设计模式(Design Pattern)引用百度百科中的一句话,就是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.实际上在我们的实际编码中到处都有设计模式的影子,比如最常用的单例 ...
- java设计模式之模板模式
模板模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同 ...
- 二、java设计模式之模板模式深进浅出
一.背景 模板模式具体怎么使用,下面我会详细讲,如果有那个地方讲的不到位了,请大家多多指教,共同学习,我尽量以白话的形式进行展示,废话不多说了,下面开始. 二.spring中的使用 springJDB ...
- 23种java设计模式详解-代理模式
什么是代理模式: Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问.所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类, ...
- java 中 statent,【行为型模式】状态模式(state)之23种java设计模式
State接口类 public interface State { void handle(); } BookedState类 /** * 已预订状态 * @author Administrator ...
- 研磨23种大话设计模式------动态代理模式 + 小结静态代理模式
大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文 get 到有用的干货知识,请帮忙点个赞呗,据说点赞的都拿到了offer 在 ...
- java设计模式-16模板模式
定义 在一个抽象类公开定义了执行它的方法的模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行 模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变 ...
- javaEE Design Patter(1)初步了解23种常用设计模式
设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. ...
最新文章
- STM32 基础系列教程 40 - Lwip_mqtt
- Transformer architecture的解释
- SAP Spartacus 页面元数据
- BitNami一键安装Redmine
- PyQt5 QTreeWidget更改item项前的展开折叠三角图标
- 【2015年第4期】基于电力运营大数据分析实现节能减排
- 一本通1613打印文章
- eclipse 使用lombok 出现的问题
- python登录验证程序_python – 测试Flask登录和身份验证?
- vue让元素固定_vue 监听dom元素的滚动事件 实现某元素吸顶或者固定位置显示
- 软件开发工程师应该具备哪些证书_初级软件工程师证书简介
- 基于vue的前端UI表单设计器
- redis配置信息解读
- 最基础硬件学习 | 简单闪烁灯制作
- uniapp中canvas将矩形图片绘制成圆形图片以及保存canvas到手机
- 护眼台灯界的“变形金刚”,性能爆表还帅气十足 | 钛空智慧星球推荐
- Perl模块使用 = 简短例子代码集合(转帖)
- android屏幕跳转,Android 几种屏幕间跳转的跳转Intent Bundle
- 电池内阻及其测量方法
- android第三方app改为系统app,加入system组,获取system权限