Java设计模式之模板(template)方法模式
一,概述
这是写的第二篇Java设计模式的解析了,不过与其说是解析,不如说是自己写的一个Demo,一篇个人笔记。
二,对模板方法模式的一些个人理解
模板方法模式是结构最简单的行为型模式,有时,我们完成一件事情时次序是固定的,只有有些步骤确实变化的。比如,当我们去银行办业务时,就是a排队取号 b办具体业务(取钱) c对工作人员评价 三个步骤,而第二个步骤是不固定的。这种情况下,使用模板方法设计模式就优势明显了。我们只要在抽象方法中定义好完成这么一件事情的骨架,将具体步骤自己实现,而将不固定的部分暴露给子类实现即可,也就是将一些步骤延迟到子类中实现。子类不能改变父类的算法结构,只能是重新定义父类的某些步骤。贴代码吧,直观一点:
package com.bighuan.template;/*** 设计模式之模板方法模式Demo* * @author bighuan 去银行办理业务的步骤 1,排队取号 2,办理业务 3,为工作人员评分*/
public abstract class BankTemplate {/*** 排队取号*/public final void getNum() {System.out.println("排队取号");}/*** 办理具体业务定义为抽象方法,供子类实现*/public abstract void exeTask();/*** 评价*/public final void evaluate() {System.out.println("为工作人员评价打分");}/*** 去银行办理业务所有步骤,整套流程*/public final void process() {getNum();exeTask();evaluate();}
}
在去银行办理业务的抽象模板类中,我们将排队取号和评价等具体方法实现,而将办理业务的核心流程定义为一个抽象的方法exeTask()方法。当子类继承BankTemplate是就必须实现这个方法了,我们就可以在这个方法中做一些取钱啊存款啊等操作。给个例子呗!好的,虽然自己卡里没什么钱,写个取钱的方法还是可以的。如下:
package com.bighuan.template;import org.junit.Test;public class WithdrawMoney extends BankTemplate {@Overridepublic void exeTask() {System.out.println("我来银行取钱");}@Testpublic void test() {process();}}
WithdrawMoney继承BankTemplate抽象类,就必须实现父类的抽象方法,在这里就可以实现办具体的业务了。你可以取钱,也可以存钱,等等。并且办一个业务中的流程是不变的,我们在父类的process()中定义好了。不知道你注意到了没有,父类中那些具体的步骤都用final关键字修饰了,不允许子类重写,子类只能自己实现那个暴露的方法,当然了,子类也是可以扩展一些方法的。由此可见,模板方法模式体现了Java中的”开闭原则”。
运行那个test()方法,结果如下:
排队取号
我来银行取钱
为工作人员评价打分
三,优缺点
优点:1,在父类中将总的具体步骤定义好,由子类实现细节。子类不会更改父类的算法结构。2,实现代码复用。3,很好的体现了开闭原则。
缺点:不同的实现都需要定义一个子类,如果实现过多,系统会过于庞大的,设计会过于复杂。但也体现了“单一职责原则”。
四,总结
少年,记住,今天是Java23种设计模式中的第二种设计模式,努力吧,将那些常用的设计模式掌握。好了,拜拜!
Java设计模式之模板(template)方法模式相关推荐
- Java 设计模式之静态工厂方法模式
设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...
- java简单工厂模式实例造车,JAVA设计模式学习5——工厂方法模式
工厂方法模式(Factory Method)又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性.我们前一节中提到当产品结构变 ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- Java设计模式(8)组合模式(Composite模式)
Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...
- Java设计模式(10)代理模式(Proxy模式)
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- 【Java设计模式】简单学外观模式——万能遥控器
目录 说明 目标 实现方式 注意事项 其他链接 说明 结构型模式之一,其他还有适配器模式.桥接模式.组合模式.装饰模式.享元模式.代理模式 外观模式(Facade Pattern)通过定义一个一致的接 ...
- 【Java设计模式】简单学桥接模式——来杯大杯加奶不加糖咖啡
目录 说明 目标 实现方式 应用场景 其他链接 说明 结构型模式之一,其他还有适配器模式.装饰模式.组合模式.外观模式.享元模式.代理模式 目标 用抽象关联取代了多层继承,将类之间的静态继承关系转换为 ...
- Java设计模式之五大创建型模式
Java设计模式之五大创建型模式 设计模式(23种) 单例模式(Singleton Pattern) 参考链接 概念 使用场景 实现思路 实现方式 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线 ...
- 【Java设计模式】简单学访问者模式——我的选择是,Yes
目录 说明 实现方式 优点 缺点 应用场景 其他链接 说明 行为型模式之一,其他还有命令模式.模板方法模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式(Interpreter模式).状 ...
最新文章
- winform 界面 xml化_FlinkSQL 1.11 on Zeppelin平台化实践
- 杭电2030java做法_杭电ACM2040java做法
- 【bfs】Replication G(P7151)
- JavaScript:constructor属性
- 决策树之C4.5(详细版终结版)
- ManjarorLinux操作笔记
- springboot+vue全栈开发_springboot+vue(一)___开发环境以及前后端项目搭建
- docker php amqp 扩展,docker搭建rabbitmq,配合php-amqplib+supervisor使用(下)
- Realtek:电脑更新后,在主机前面板插上耳机没有声音,怎么解决?
- 数学基础知识总结 —— 4. 常见函数图像
- hane WIN nfs配置
- 四足机器人动力学建模(一)
- android发现u盘自动安装apk,安卓自动识别U盘中APK文件并进行安装操作
- 艾美捷-临床数量排名前20的药物靶点分析-磷酸二酯酶(PDEs)抗体
- 计算机二级考试准考证打印指南 计算机二级考试准考证打印入口
- js+css制作导航栏下划线跟随动画,App+H5点击效果
- “笨办法”学Python3,Zed A. Shaw, 习题4~5
- 【翻译】Unity2017.3 版本发布说明
- win xp查询计算机配置文件,Win XP文件夹属性没有共享选项卡
- 怎么检查计算机硬盘有没有供电,事实:如何检测计算机硬盘是否有问题?如何使用硬盘检测工具...
热门文章
- Java 随机数,可变参数,JDBC,访问控制
- Node.js 教程第五篇——request
- OS X中的bundle
- 微博市值破百亿,真的只是恰巧赶上奥运了吗?
- 线程控制之线程和信号
- 脱离 Windows 完全使用 Linux你花了多少时间适应?
- 3.以每行一个单词的形式打印其输入
- 15. PHP 全局变量 - 超全局变量
- c++ builder 存储过程 mysql mssql_C++ Builder实现Microsoft SQL Server 2000 的扩展存储过程...
- maven学习七之用户密码修改和添加用户