设计模式_模板方法模式(17)

来源:互联网 发布:手机炉石记牌器软件 编辑:程序博客网 时间:2024/06/06 20:12
  •  什么是模板方法模式
  •  模板方法模式的例子
  •  模板方法模式的优缺点
  •  模板方法模式的使用场景
  •  闲言碎语

什么是模板方法模式

   模板方式模式顾名思义就是定义一个模板,然后再由子类去具体实现一个模板.在一定程度进行抽象.举个栗子:我们大部分人一天的活动流程都可以抽象为起床,上班,回家,睡觉(部分吃喝拉撒忽略不计);然而每个具体的人的又不一样.总的来说模板方法模式包括:

  • 基本方法:是由子类实现的方法,并且在模板方法被调用。
  • 模板方法:可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调用,完成固定的逻辑。

UML

   

模板方法模式的例子

抽象类(定义流程模板)

package com.designPattern.template;/** * 抽象出模板方法的父类 *  * @author Jason * */public abstract class Person {/* * 每天固定的流程 */public void doTask() {System.out.println("起床!");work();System.out.println("睡觉!");}// 抽象的工作.具体工作由子类进行完成public abstract void work();}
对流程填充A
package com.designPattern.template;/** * 具体的子类 *  * @author Jason * */public class Cooker extends Person {@Override // 具体的工作public void work() {System.out.println("去厨房上班!");}}
对流程填充B
package com.designPattern.template;/** * 具体的子类 *  * @author Jason * */public class Waiter extends Person {@Override // 具体工作public void work() {System.out.println("去餐厅上班!");}}
测试用例
package com.designPattern.template;import org.junit.Test;/** * 测试用例 *  * @author Jason * */public class TestCase {@Testpublic void test() {Cooker cooker = new Cooker();cooker.doTask();Waiter waiter = new Waiter();waiter.doTask();}}


模板方法模式的优缺点

  优点

  • 模板方法模式在一个类中形式化地定义算法,而由它的子类实现细节的处理。
  • 模板方法模式是一种代码复用的基本技术。
  • 模板方法模式导致一种反向的控制结构,通过一个父类调用其子类的操作,通过对子类的扩展增加新的行为,符合“开闭原则”。

  缺点
  • 每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,但是更加符合“单一职责原则”,使得类的内聚性得以提高。

模板方法模式的使用场景

  1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
  2. 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
  3. 对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法和父类具体方法,而一些可以改变的细节由其子类来实现。
  4. 控制子类的扩展。

闲言碎语

   在日常开发中模板方法模式应用还是非常多的.可以说是简单粗暴.不但提高开发的效率,而且也同时减低了程序开发的复杂性