首页 > 其他分享 >行为型模式-模板方法模式

行为型模式-模板方法模式

时间:2022-10-26 18:36:38浏览次数:62  
标签:行为 模式 算法 子类 方法 模板

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,他涉及算法与对象间职责的分配。

行为型模式分为类行为型模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。

行为型模式分为:

  • 模板方法模式
  • 策略模式
  • 命令模式
  • 职责链模式
  • 状态模式
  • 观察者模式
  • 中介者模式
  • 迭代器模式
  • 访问者模式
  • 备忘录模式
  • 解释器模式

以上11种行为模式,除了模板方法模式和解释器模式是类行为型模式,其他的全部属于对象行为型模式

 概述

在面向对象程序设计过程中,程序员常常会遇到的这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现和具体的环境相关。

例如,去银行办理业务一般要经过以下四个流程:取号——>排队——>办理具体业务——>对银行工作人员进行评分等,其中取号,排队和评分对每个客户都是一样的,可以在父类中实现,但是办理具体业务因人而异,可以延迟到子类中实现

定义

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

结构

模板方法(Template Method):模式包含以下主要角色:

  • 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。他由一个模板方法和若干个基本方法构成。
    • 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法
    • 基本方法:是实现算法各个步骤的方法,是模板方法的组成部分。基本方法又可以分为三种
      • 抽象方法(Abstract Method):一个抽象方法有抽象类声明,由具体子类实现。
      • 具体方法(Concrete Method):一个具体方法由一个抽象类或具体声明并实现,其子类可以进行覆盖也可以直接继承。
      • 钩子方法(Hook Method):在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种(一般钩子方法是用于判断的逻辑方法,这类方法名一般为isXXX,返回值类型为boolean类型)
  • 具体子类(Concrete Class):实现抽象类中所定义的抽象方法和钩子方法,他们是一个顶级逻辑的组成步骤

实例实现

【例】炒菜

炒菜的步骤是固定的,分为倒油,热油,到蔬菜,到调料品,翻炒等步骤。现通过模板方法模式来用代码模拟,类图如下

 

标签:行为,模式,算法,子类,方法,模板
From: https://www.cnblogs.com/lpzjava/p/16829550.html

相关文章

  • 设计模式的六大原则。简称:SOLID
     原文网址:https://blog.csdn.net/hkduan/article/details/114042869 设计模式的六大原则。简称:SOLID迪米特法则(LawofDemeter):如果两个类之间并不需要直接通信,那么就......
  • pycharm设置文件模板
      模板样例:#!/usr/bin/python#-*-coding:UTF-8-*-"""@author:${USER}@Description:描述@file:${NAME}.py@time:${YEAR}/${MONTH}/${DAY}"""if__na......
  • 设计模式七(外观模式,享元模式)
    外观模式(FacadePattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂......
  • LSI SAS 2208 阵列卡刷 IT 模式
    1.前言对于需要大容量存储但又没有足够预算费用并且对功能和稳定性有一定要求的情况,FreeNAS(现在改名叫TrueNAS)应该是不二选择。受TrueNAS内核驱动(FreeBSD)的影响,一些品牌......
  • rabbitmq fanout(广播)模式
    配置信息bbitMQ:host:rabbitmq.comport:0000username:0000password:0000topic:amq.fanoutqueueName:icost-betavirtualHost:icost-beta#......
  • React组件设计模式-纯组件,函数组件,高阶组件
    一、组件(1)函数组件如果你想写的组件只包含一个render方法,并且不包含state,那么使用函数组件就会更简单。我们不需要定义一个继承于React.Component的类,我们可以定......
  • Scala-模式匹配
    模式匹配简介类似于java中switch当数据满足某一个分支时,执行完毕后,就直接跳出case分支类似于default语言,分支匹配其实就是顺序匹配如果数据没有匹配任何规则......
  • 企业级自定义表单引擎解决方案(十四)--表单模板2
    .netcore研发的自定义表单引擎,采用强大的规则引擎将所有的业务串联起来的,和其他低代码平台是有本质的区别的,目标是完全解放繁琐的CRUD工作。常规的业务,在需求以及数据库......
  • 通过一个例子让你彻底掌握 Go 工作区模式
    通过一个例子让你彻底掌握Go工作区模式站长polaris Go语言中文网 2022-10-2608:52 发表于北京 阅读本文大概需要5分钟。大家好,我是polarisxu。早在Go1.18......
  • Gitea 1.18 功能前瞻(其二):文件树导航、基于 YAML 格式创建的工单模板、在多种语言的 RE
    Gitea1.18的发布日期临近了,这里收集并展示了一些新版本中的前端界面新特性。1.我们在代码评审页面的侧边栏引入了树形结构的文件导模块当你打开合并请求-文件变动......