java中引导页面的,设计模式之模板模式引导篇
在讲模板模式原理前,我们按照惯例,先来个生活中例子。茶馆需要开发一个自动的泡咖啡和泡茶的程序。
来源:凯哥Java(kaigejava)
我们先来看看泡咖啡和泡茶的步骤:
我们根据上图写代码实现:
泡咖啡类,如下图:
泡茶类如下图:
测试类:
运行结果:
很简单。也很容易写出来。写出来很清楚。
从上图中,可以发现,两个流程几乎是一样的套路(步骤)。其中,不变的部分:水烧开、倒入杯子、送给客人。这三步是不变的。
变化的是:冲咖啡还是泡茶叶;加糖/牛奶还是加柠檬这两个步骤是变化的。
项目进化第一个版本:
我们将不变的抽取出来,放到一个公共的类中。HotDrink。然后让coffe和tea都继承公共的类。得到的类图如下:
hotdrink超类代码如下:
项目进化第二个版本:
经过分析,我们发现,两个流程的还有相同的地方:
1.两个流程的步骤都一样(都是五个步骤的);
2.无论泡茶还是泡咖啡都是brew操作;
3.无论加糖还是加柠檬都是添加调料的。
所以,我们对项目在进行一次提取:
我们将操作流程也提取到超类中,将2和3操作也放到超类中。让子类具体实现。所以得到类图如下:
我们来看看这次hotdrink类里面:
public abstract classHotDrink {
public final voidprepareRecipe(){
boilWater();
brew();
pourInCup();
addCondiments();
send();
}
protected abstract voidaddCondiments();
protected abstract voidbrew();
private final voidboilWater() {
System.out.println("一.烧水");
}
private final voidpourInCup() {
System.out.println("三.倒入杯中");
}
我们发现,在prepareRecipe方法和boilWter、pourInCup、send这四个操作都添加了final关键字来修改。这是为什么呢?
从上面分析,我们知道,都是五个步骤,而且五个步骤中的三个步骤(烧水、倒入杯中、送客人)也是固定不变的。那么,在Java中,固定不变的这个怎么表示呢?对了,就使用fianl这个关键字修饰就可以了。这样,就可以放置子类不能随便修改步骤(比如由五步变成三步),已经规定的不能在修改了。比如烧水这个不烧了,这样是不行的。
我们来看看,热饮coffee和tea的类:
hotDrinkTea:
测试方法:
运行结果:
我们对项目进化进行复盘总结,可以得到:
所谓的模板模式:封装了一个算法的步骤,并允许子类为一个或多个步骤方法提供实现。模板模式,可以使子类在不改变算法结构(如上面的五步)的情况下,重新定义算法中某些步骤(如上面的第二步和第四步)
模板模式类图如下:
类图说明:
1:是一个抽象类(如:hotDrink)
2:有个模板方法。这个模板方法是final的(如:prepareRecipe方法)
3:由三种方法:
AbsOperation:抽象的方法(泡咖啡、加牛奶)
concreteOp:具体的方法(如烧水。可以是final的也可以不是)
hook:钩子。可以选的子类可以覆盖父类的方法。
我们来演示下带有hook的。
比如,现在有了新需求,客户可以自己选择需不需要添加调料。这个怎么做呢?
我们从新定义模板:
tea实现了该模板类,并且不加柠檬的:
测试运行:
结果:
java中引导页面的,设计模式之模板模式引导篇相关推荐
- java中刷新页面的js,[Java教程]js页面刷新之实现框架内外刷新(整体、局部)
[Java教程]js页面刷新之实现框架内外刷新(整体.局部) 0 2016-10-12 12:00:56 这次总结的是框架刷新: 框架内外的按钮均可以定义网页重定向, 框架内部页面的按钮可以实现局部刷 ...
- 移动端引导页UI设计临摹模板,ui设计师进阶必备
通俗点来讲引导是带领用户更快速更愉悦地达到目标的过程,能在用户使用产品遇到障碍之前给予及时的帮助.在移动互联网的产品的设计中,新手引导的设计则是在用户初次使用该移动产品时,给予的一些必须性的帮助以使得 ...
- java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...
23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...
- 笔记:Java中的单例设计模式
之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...
- 墨渊第十七版引导页源码 彩虹云任务引导页模板
介绍: 彩虹云任务引导页: 1.大部分静态文件使用360的CDN,加快浏览速度 2.全局响应式界面,加倍体验 3.标题.关键词,介绍均在后台设定 4.适合彩虹云任务V7.X系列 使用教程: 上传网站根 ...
- 设计模式回顾——模板模式(C++)
文章目录 1 前言 2 什么是模板模式 2.1 模板模式组成 2.2 模板模式UML图 2.3 模板模式作用 3 模板模式优缺点 4 什么地方使用模板模式 5 模板模式实现 6 模板模式与策略模式比较 ...
- java中selenium设置chrome浏览器为开发者模式与IP代理
java中selenium设置chrome浏览器为开发者模式与IP代理 前言 代码 前言 之前为公司写了个爬虫项目,有时候为了绕过网站的反爬机制需要用到ip代理以及设置浏览器为开发者模式,看了一些se ...
- 23种设计模式之模板模式
文章目录 概述 模版模式的优缺点 优点 缺点 模版模式的使用场景 模板模式的结构和实现 模式结构 模式实现 总结 概述 模板模式指:一个抽象类中,有一个主方法,再定义1-n个方法,可以是抽象的,也可以 ...
- java中引导页面的,Android实现欢迎引导页面
现在的大多数应用都会有一个欢迎引导页面, 需求分析: 程序安装后第一次启动: 启动页-->功能引导页-->应用主页 以后启动: 启动页-->应用主页 实现原理: 用SharedPre ...
最新文章
- 1112: 零起点学算法19——输出特殊值
- ActiveX(五)更好的“ActiveX”?
- html中h3的样式,比较好看的css自定义样式(标题 h1 h2 h3)
- [BZOJ2179]FFT快速傅立叶
- boost::core::typeinfo的用法实例
- [深度学习]Ubuntu16.04 + GTX 1050 + cuda8.0 + cuDNN5.1 + caffe安装详解
- java nio改造io,java – 将NIO与IO混合
- 马尔可夫Markov决策过程 MDP、马尔可夫奖励过程MRP
- Java的内存模型,java初级面试笔试题
- 为LogAnalyzer添加源IP
- php用手机摇一摇,H5做出手机摇一摇功能的实现步骤
- 公式中的引号怎么输_Excel计数函数中这些奇怪的参数让我百思不得其解!
- 文献管理三剑客之Noteexpress:更新一次文献后把文献自动插一次
- 威纶通触摸屏部分元件下载后不显示且编辑时无法选择
- spfa算法(c++)
- mysql有rollup函数_如何在MySQL ROLLUP函数中替换NULL类别标题?
- 电脑上计算机软件一直自动弹出,拨号连接自动弹出,详细教您如何解决电脑总是自动弹出...
- MOTO 国行ME525升级Android2.3.4教程
- 我的世界基岩版超简单红石教程3
- 网络编程学习(10)/ FTP项目(4) ——文件下载和下载断点续存功能
热门文章
- ### Error building SqlSession.### The error may exist in entity/UserMapper.xml
- java 方法重载 应用举例,Java 实例 - 重载(overloading)方法中使用 Varargs
- 期末考试前的预习,科目:化工设备与反应器(6)
- 五十七、教用Python中的turtle海龟画图(下篇)
- sklearn特征的提取(上)
- 自监督学习的发展趋势:事半功倍的模型训练和数据效能
- 直播 | 腾讯天衍实验室张子恒:详细解读天衍实验室知识图谱对齐技术
- 长篇问答任务(LFQA)的发展面临哪些阻碍?
- 基于深度学习的多目标跟踪算法——ReID与MOT的联系
- LeetCode刷题:滑动窗口模板以及典型例题