`

行为型-模版模式

 
阅读更多

模版模式

定义

定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。模版模式其实很简单,就是一个抽象定义好公共的步骤,把一些单独的算法提取出来。让子类实现。

1>模板模式定义了算法的步骤,把这些步骤的实现延迟到子类

2>模板模式为我们提供了一个代码复用的技巧

3>模板抽象类中可以定义具体方法、抽象方法和钩子方法

4>为了防止子类改变模板中的算法,可以将模板方法声明为final

5>钩子是一种方法,超类中可提供默认实现或者空实现,子类可覆盖或者不覆盖

 

好莱坞原则,别调用我们,我们会调用你的。模版模式,告诉子类不要调用父类,父类会调用你的。

 

UML



 

 

应用与实例

这个模式在实际情况中也经常用到,比如我们做接口,可能有的步骤是,接收报文,转换报文,同步/异步发送报文,我们用一个抽象类把其他代码逻辑处理好。同步还是异步就是设计成一个钩子,用户可通过重写方法来确定同步还是异步。

集合的compare方法貌似就是用了模版模式 实现compareTo方法即可排序

例子:

我们看一个headfirst这本书里面的例子,煮茶和咖啡

public abstract class Beverage {   
    /**  
     * 冲泡咖啡或茶...流程  
     */  
    public final void create(){   
        boilWater();//把水煮沸   
        brew();//用沸水冲泡...   
        pourInCup();//把...倒进杯子   
        addCoundiments();//加...   
    }   
  
  
    public abstract void addCoundiments();   
  
    public abstract void brew();   
       
    public void boilWater() {   
        System.out.println("煮开水");   
    }   
       
    public void pourInCup() {   
        System.out.println("倒进杯子");   
    }   
} 

  茶:

public class Tea extends Beverage{   
  
    @Override  
    public void addCoundiments() {   
        System.out.println("添加蜂蜜");   
    }   
  
    @Override  
    public void brew() {   
        System.out.println("用水冲茶");   
    }   
  
}  

 

 

咖啡:略。。。

 

模版模式的优点:

  • 封装不变部分,扩展可变部分。
  • 提取公共部分代码,便于维护。
  • 行为控制交由子类来实现。

模版模版模式的缺点:

     按照我们设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类完成具体的事物属性和方法,但是模板方法模式却颠倒了,抽象类定义了部分抽象方法,由子类实现,子类执行的结果影响了父类的结果,也就是子类对父类产生了影响,这在复杂的项目中,会带来代码阅读的难度,而且也会让新手产生不适感。

一旦基类的接口发生了变化,每个继承类都得跟着修改才能够继续使用.这就是所谓高耦合与难维护的说法的来源.

 

模式的使用场景:

  • 多个子类有公有的方法,并且逻辑基本相同时。
  • 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
  • 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为。

比较模版模式和策略模式

Strategy模式的应用场景是:
1. 多个类的分别只是在于行为不同
2. 你需要对行为的算法做很多变动
3. 客户不知道算法要使用的数据

 

Template Method模式的应用场景是:
1. 你想将相同的算法放在一个类中,将算法变化的部分放在子类中实现
2. 子类公共的算法应该放在一个公共的类中,避免代码重复

 

模版模式是提供了一个算法的大纲,让子类实现某些步骤,对算法有更多的控制权,不会有重复的代码,策略模式不是使用继承进行算法实现,而是通过对象组合的方式让用户选择算法实现,改变策略对象,即可改变算法,更富弹性。但使用的对象较多

  • 大小: 9.7 KB
分享到:
评论

相关推荐

    JAVA-设计模式-行为型模式-模板方法模式

    JAVA-设计模式-行为型模式-模板方法模式

    c++设计模式-行为型模式-模板方法模式

    c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...

    emperwang#advanced-java-docs#19-行为型-模板方法模式1

    模板模式什么是模板模式Define the skeleton of an algorithm in an operation, deferring some s

    设计模式课件大全

    设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...

    设计模式之行为型模式

    本课程重点介绍了十一种行为型模式:职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。

    设计模式_行为型_模板方法模式.md

    设计模式_行为型_模板方法模式

    23种设计模式 -设计模式图解.7z

    23种设计模式的特点定义、优缺点、使用场景,源码中...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    设计模式之11个行为型模式

    行为型简介职责链模式(ChainofResponsibility)命令模式(Command)解释器模式(Interpreter)迭代器模式(Iterator)中介者模式(Mediator)备忘录模式(Memento)观察者模式(Observer)状态模式(State)策略模式(Strategy)模板...

    23种设计模式 (创建型,结构型,行为型)

    行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern)...

    [行为型模式] 模板方法模式的理解

    NULL 博文链接:https://jacky-dai.iteye.com/blog/2304940

    软件设计师必读的书-设计模式

    5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 ...

    C#23种设计模式样例代码和UML图

    行为型模式(策略模式、 迭代器模式、原型模式、职责链模式、 模板方法、 命令模式、 解释器模式、 中介者模式、 访问者模式、 状态模式、 备忘录模式); 结构型模式(代理模式、桥接模式、适配器模式、外观模式、...

    设计模式-C++

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    设计模式--C++

    5.10 TEMPLATE METHOD(模板方法)—类行为型模式 214 5.11 VISITOR(访问者)—对象行为型模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    《Java设计模式》源代码

    《Java设计模式》源代码.rar “结构型模式”中的“适配器模式”的定义、结构与使用。 “结构型模式”中的...“行为型模式”中的模板方法模式的定义、结构与使用。 “行为型模式”中的访问者模式的定义、结构与使用。

    设计模式--可复用面向对象软件的基础

    5.10 TEMPLATE METHOD(模板方法)——类行为型模式 5.11 VISITOR(访问者)——对象行为型模式 5.12 行为模式的讨论 第六章 结论 6.1 设计模式将带来什么 6.2 一套通用的设计词汇 6.3 书写文档和学习的辅助手段 ...

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    结构型模式 队列模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 行为模式(类行为模式) 解释器模式 模板方法模式 行为模式(对象行为模式) 策略模式 观察者模式 状态模式 导入模式 迭代器模式 命令...

    23种设计模式 - 各种模式的学习

    行为型 13. Interpreter(解释器) 14. Template Method(模板方法) 15. Chain of Responsibility(责任链) 16. Command(命令) 17. Iterator(迭代器) 18. Mediator(中介者) 19. Memento(备忘录) ...

    unity-23种常见设计模式unity版

    总体来说设计模式分为三大类: 创建型模式:共五种:...行为型模式:共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象...4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

Global site tag (gtag.js) - Google Analytics