这两天特别忙,有两位大神在这周结婚,我忙着去蹭吃蹭喝!



没毛病,群主就是个吃货!所以就索性把之前写的设计模式拿出来一篇,分享给大家!


还是那句话,网上有大量的设计模式的文章,他们写的都非常的好,我也能看懂,但是我在实际的项目中用不出来。

你说奇怪不,我会,我懂,但是我不会用。面试回答我都 OK,但是我想在项目中使用,但是就是找不到使用场景!

这样的人不在少数,微信群里有一个人抛出这个问题后,都炸锅了。有同感,请群主指点,所以便有了这篇文章。

模板方法的设计模式非常的简单,类图如下:

简单吧,确实太简单了。下面我们说一说我们电商系统对模板方法的使用。

我们公司,有非常多的子公司,有线上电商,还有线下实体店。每个公司每个月都要下载一些报表,或者打印合同等之类的需求。公司要求,每次打印合同或者下载报表,表头表尾都要有对应的水印和公司对应的抬头。这里我们就用到了模板方法模式,针对这个使用场景,我们抽象一下,实现代码大致如下:


A 公司的实现:


B 公司的报表实现:


调用实例如下:


简单吧,模版方法非常的简单!

除了我上这个例子,JDK 中也有模板方法的身影,比如:AbstractQueuedSynchronizer、多线程 AQS 的实现。Dubbo 中也有模板方法的使用,比如:Dubbo 中负载均衡算法的实现。SpringBatch 中也有,如果你用过这个框架的话!tomcat 的 LifecycleBase 也是模板方法模式,Spring 中的 JdbcTemplate。

模板模式是一种行为设计模式,它的实现思路是,创建一个桩方法,并且定义一些步骤让子类来实现。模板方法定义了一个算法的执行步骤,或者说能够提供一种默认的实现,这种实现概括一部分子类或者全部子类的共同部分。

  • 模板方法应该是由确定的步骤组成。这些步骤的顺序是固定的。基类与子类之间某些方法或者实现可以有所不同。模板方法应该是 final 的。

  • 大多时候,子类的调用的方法是来自于超类。但是在模板模式中,超类的模板方法调用的方法却来至于子类,这就是著名的Hollywood原则-“don’t call us, we’ll call you”。

  • 基类方法的默认实现被退化为钩子 Hooks 的概念,他们被设计在子类中被重写,如果你期望一些方法在子类中不被重写,你可以让他们为 final。

看吧,模板方法模式是如此的简单,喜欢大家都会用它!


©著作权归作者所有:来自51CTO博客作者mob604756f5e525的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 收藏分享:众多PPT模板,分享给需要的你!
  2. 只知道java反射,宁知道内省吗?
  3. 吉他调音器的使用方法
  4. 十分钟学会Java8:lambda表达式和Stream API
  5. 深入理解[代理模式]原理与技术
  6. 工作流引擎的测试容器-功能-使用方法-注意事项
  7. 用 Keepalived+HAProxy 实现高可用负载均衡的配置方法
  8. 【php基础入门】PHP中常用的数组操作使用方法笔记整理(推荐)
  9. ODL源码分析之flowmod下发流程

随机推荐

  1. Android(安卓)Support V4, V7, V13的作用
  2. [置顶] android ANR
  3. Android(安卓)Studio下Ndk开发踩过的坑以
  4. android 数据存储之 SharedPreference
  5. Android实践之ScrollView中滑动冲突处理
  6. 2016总结+2017计划
  7. XposedHook:hook敏感函数
  8. Android(安卓)反编译
  9. 如何把Eclipse工程导入到Android(安卓)St
  10. Android单元测试之Robolectric