23种设计模式之模板方法模式

模板方法模式的定义

定义一个操作中的算法的框架,而将一些步骤延迟到子类中. 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.

通俗的讲,就是将子类相同的方法, 都放到其抽象父类中

类图如下:

23种设计模式之模板方法模式

 

其中, AbstractClass 叫抽象模板, 它的方法分为以下两类:

  1. 基本方法, 基本方法也叫做基本操作, 是由子类实现的方法, 并且在模板方法被调用
  2. 模板方法, 可以有一个或几个, 一般是一个具体方法, 也就是一个框架, 实现对基本方法的调度, 完成固定逻辑, 一般模板方法都加上final关键字, 不允许被覆写, 以防止恶意的操作

ConcreteClass1和ConcreteClass2叫做具体模板, 实现父类所定义的一个或多个抽象方法, 也就是父类定义的基本方法在子类中得以实现.

抽象模板类实现代码如下:

23种设计模式之模板方法模式

 

具体类实现基本方法.

模板方法模式的应用

模板方法模式的优点

  1. 封装不可变部分,扩展可变部分. 把认为是不变部分的算法封装到父类实现,而可变部分的则可以通过继承来继续扩展
  2. 提取公共部分代码,便于维护. 试想, 如果我们不抽取到父类,维护人员为了修正一个缺陷,需要到处查找类似的代码
  3. 行为有父类控制,子类实现. 基本方法是由子类实现的, 因此子类可以通过扩展的方式增加相应的功能, 符合开闭原则

模板方法模式的缺点

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

模板方法模式的使用场景

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

模板方法模式的扩展

将上面的 AbstractClass 抽象类修改后代码如下:

23种设计模式之模板方法模式

 

子类实现 isRun() 方法, 通过子类的不同实现,可以影响到公共代码的执行, 暗爽

也就是说外界条件改变,影响到模板方法的窒息那个. 在我们抽象类中 isRun 的返回值就影响了模板方法的执行结果, 该方法就叫做钩子方法.

模板方法模式就是在模板方法中按照一定的规则和顺序调用基本方法.


使用模板方法模式, 是非常容易扩展的一种模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

课堂笔记——Ubiquitous Computing

一 课程相关 1、Course Objectives provide a unified overview on the broad filed of Ubiquitous Computing 2、Evaluation short talk1(25%)第三次课 paper reading of 2017(Percom,Ubicomp,IJCAI,KDD,AAAI) short talk 2 (25%) 第五次课 pape…

23种设计模式之建造者模式

建造者模式的定义 建造者模式也叫生成器模式, 定义如下: 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示 类图如下: 在建造者模式中, 四个角色如下: Product 产品类: 通常是实现了模板方法模式, 也就是有模板方法和基本方法Builder 抽象建造者…

23种设计模式之原型模式

原型模式的定义 定义: 用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象. 通俗的讲,就是不再使用new 来创建对象, 而改用 clone 方法来得到新的对象 原型模式的核心是一个 clone 方法, 通过该方法进行对象的拷贝, Java提供了一个Cloneable接口来标识这个对象…

课堂笔记——Data Mining(1)

一、Introduction …… 1、Major Issues in Data Mining User Interaction Presentation and visualization of data mining results : Efficiency and Scalability Diversity of data types: complex types of data; Mining dynamic, networked, and global data reposit…

23种设计模式之代理模式

代理模式的定义 代理模式是一个使用率非常高的模式,其定义为: 为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫做委托模式, 它是一项基本设计技巧. 许多其他的模式, 如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式, 而且在日常的应用中,…

论文翻译——FingerSound:Recognizing unistroke thumb gestures using a ring

1. INTRODUCTION 可穿戴计算已经发展到相当大的消费市场,近年来已经有了大量的应用。可穿戴设备 - 最突出的智能手表和屏幕带,以及Oculus Rift等移动虚拟现实设备 - 现在可以被视为商品硬件,大部分人口在日常生活中使用它们。随着这种普及&am…

23种设计模式之中介者模式

中介者模式的定义 中介者模式, 当多个类彼此关联, 会增大耦合性, 这时各个模块通过中介者进行交流, 每个模块只负责自己的业务逻辑, 不属于自己的就丢给中介者, 降低耦合 定义: 用一个中介对象封装一系列的对象交互, 中介者使各对象不需要显示的相互作用,从而使其耦合松散,而…

课堂笔记——计算机体系结构(1)

落了一节课,直接lecture3 Lecture3 Basic Pipeline 1、Single-cycle implementation: seldom used 取指 译码 执行 读mem/cache 写回WB 2、How to make it fast? To decrease the clock cycle time? difficult! Whats the problem?资源浪费 串行…

23种设计模式之命令模式

命令模式的定义 定义: 将一个请求封装成一个对象, 从而让你使用不同的请求将客户端参数化, 对请求排队或者记录请求日志, 可以提供命令的撤销和恢复功能 通俗的说, 就是当有不同的请求时, 将每一种请求都封装成一个对象, 不同的请求调用不同的执行者来执行 命令模式的通用类…

Ubicomp2018年论文列表

S1: IMPROVING OUR MENTAL HEALTH (关于心理健康) A Weakly Supervised Learning Framework For Detecting Social Anxiety And DepressionTouch Sense: Touch Screen Based Mental Stress Sense(触摸屏 压力)Tracking Depression…

23种设计模式之责任链模式

责任链模式的定义 定义: 使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系. 将这些对象连成一条链, 并沿着这条链传递该请求,直到有对象处理它为止 通俗的讲, 就是将对请求的处理组成一条链, 当请求来时, 在链中依次传递, 知道找到能够处理此请求的…

Android Studio Process 'command ...\aapt.exe'' finished with non-zero exit value 1

错误:Process command "...\build-tools\27.0.3\aapt.exe finished with non-zero exit value 1 org.gradle.initialization.ReportedException: org.gradle.internal.exceptions.LocationAwareException: Execution failed for task :app:processDebugResour…

23种设计模式之装饰模式

装饰模式的定义 定义: 动态的给一个对象添加一些额外的职责. 就增加功能来说, 装饰模式相比生成子类更为灵活. 通俗的说, 就是对一个类或方法进行包装 装饰模式的通用类图: 类图中的四个角色说明如下: Component 抽象构件: Component是一个接口或抽象类, 就是定义我们最核心…

23种设计模式之策略模式

策略模式的定义 定义: 定义一组算法, 将每个算法都封装起来, 并且使它们之间可以互换 通俗的说, 就是对一个接口下的一组算法进行封装 其类图如下: 其中三个角色说明: Strategy 抽象策略角色: 策略、算法家族的抽象, 通常为接口, 定义每个策略或算法必须具有的方法和属性Co…

ZJU期末考试记录(研究生)——数据挖掘

1、全英文试卷,可以用中文作答,时间2h,普遍反映时间不足; 2、可以带的设备:计算器(必需) 3、题型:填空题(2*8),大题 4、题目记录: …

23种设计模式之门面模式

门面模式的定义 定义: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行. 门面模式提供一个高层次的接口, 使得子系统更易于使用. 通俗的说, 就是设计一个类,专门用于对外服务的, 门面对象是外界访问子系统内部的唯一通道 其类图如下: 其中两个角色如下: Fac…

转载:Android Studio 3.1.2 新项目报错 AAPT2 error: check logs for details (Gradle 3.1.2)

转载自 https://blog.csdn.net/u011618035/article/details/80574645 原本好好的项目,突然有一天打开就开始报错AAPT2 error: check logsfor details。展开错误详细信息错误文本com.android.build.gradle.tasks.ResourceException:Error: java.util.concurrent.Exec…

23种设计模式之迭代器模式

迭代器模式的定义 定义: 它提供一种方法访问一个容器对象中各个元素, 而又不需暴露该对象的内部细节 其类图如下: 其中角色: Iterator 抽象迭代器: 抽象迭代器负责定义访问和遍历元素的接口, 而且基本上是有固定的三个方法: first()获得第一个元素, next()访问下一个元素, i…

2019Mobicom 论文列表

(BurstTracker)Detecting if LTE is the Bottleneck with BurstTracker (超声波定位)Rebooting Ultrasonic Positioning Systems for Ultrasound-incapable Smart Devices (无线)Wideband Full-Duplex Wi…

23种设计模式之适配器模式

适配器模式的定义 定义: 将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 通俗的说, 就是有 A、B两个接口, 现在要求把A和B安装在一起使用, 两者的接口不一致, 怎么办? 引入一个物体C, 如下图: 引入C物体后,…