一,概述

这是写的第二篇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)方法模式相关推荐

  1. Java 设计模式之静态工厂方法模式

    设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...

  2. java简单工厂模式实例造车,JAVA设计模式学习5——工厂方法模式

    工厂方法模式(Factory Method)又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性.我们前一节中提到当产品结构变 ...

  3. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  4. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...

  5. Java设计模式(10)代理模式(Proxy模式)

    理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...

  6. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  7. 【Java设计模式】简单学外观模式——万能遥控器

    目录 说明 目标 实现方式 注意事项 其他链接 说明 结构型模式之一,其他还有适配器模式.桥接模式.组合模式.装饰模式.享元模式.代理模式 外观模式(Facade Pattern)通过定义一个一致的接 ...

  8. 【Java设计模式】简单学桥接模式——来杯大杯加奶不加糖咖啡

    目录 说明 目标 实现方式 应用场景 其他链接 说明 结构型模式之一,其他还有适配器模式.装饰模式.组合模式.外观模式.享元模式.代理模式 目标 用抽象关联取代了多层继承,将类之间的静态继承关系转换为 ...

  9. Java设计模式之五大创建型模式

    Java设计模式之五大创建型模式 设计模式(23种) 单例模式(Singleton Pattern) 参考链接 概念 使用场景 实现思路 实现方式 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线 ...

  10. 【Java设计模式】简单学访问者模式——我的选择是,Yes

    目录 说明 实现方式 优点 缺点 应用场景 其他链接 说明 行为型模式之一,其他还有命令模式.模板方法模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式(Interpreter模式).状 ...

最新文章

  1. winform 界面 xml化_FlinkSQL 1.11 on Zeppelin平台化实践
  2. 杭电2030java做法_杭电ACM2040java做法
  3. 【bfs】Replication G(P7151)
  4. JavaScript:constructor属性
  5. 决策树之C4.5(详细版终结版)
  6. ManjarorLinux操作笔记
  7. springboot+vue全栈开发_springboot+vue(一)___开发环境以及前后端项目搭建
  8. docker php amqp 扩展,docker搭建rabbitmq,配合php-amqplib+supervisor使用(下)
  9. Realtek:电脑更新后,在主机前面板插上耳机没有声音,怎么解决?
  10. 数学基础知识总结 —— 4. 常见函数图像
  11. hane WIN nfs配置
  12. 四足机器人动力学建模(一)
  13. android发现u盘自动安装apk,安卓自动识别U盘中APK文件并进行安装操作
  14. 艾美捷-临床数量排名前20的药物靶点分析-磷酸二酯酶(PDEs)抗体
  15. 计算机二级考试准考证打印指南 计算机二级考试准考证打印入口
  16. js+css制作导航栏下划线跟随动画,App+H5点击效果
  17. “笨办法”学Python3,Zed A. Shaw, 习题4~5
  18. 【翻译】Unity2017.3 版本发布说明
  19. win xp查询计算机配置文件,Win XP文件夹属性没有共享选项卡
  20. 怎么检查计算机硬盘有没有供电,事实:如何检测计算机硬盘是否有问题?如何使用硬盘检测工具...

热门文章

  1. Java 随机数,可变参数,JDBC,访问控制
  2. Node.js 教程第五篇——request
  3. OS X中的bundle
  4. 微博市值破百亿,真的只是恰巧赶上奥运了吗?
  5. 线程控制之线程和信号
  6. 脱离 Windows 完全使用 Linux你花了多少时间适应?
  7. 3.以每行一个单词的形式打印其输入
  8. 15. PHP 全局变量 - 超全局变量
  9. c++ builder 存储过程 mysql mssql_C++ Builder实现Microsoft SQL Server 2000 的扩展存储过程...
  10. maven学习七之用户密码修改和添加用户