模板方法模式_第1页
模板方法模式_第2页
模板方法模式_第3页
模板方法模式_第4页
模板方法模式_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DesignPatterns模板方法模式河南理工大学大纲模板方法模式概述模板方法模式的结构与实现模板方法模式的应用实例钩子方法的使用模板方法模式的优缺点与适用环境插卡验证业务处理(存款/取款/转账……)退卡模板方法模式概述请客吃饭示意图模板方法模式概述分析请客吃饭:(1)点单

(2)吃东西(3)买单软件开发:某个方法的实现需要多个步骤(类似“请客”),其中有些步骤是固定的(类似“点单”和“买单”),而有些步骤并不固定,存在可变性(类似“吃东西”)模板方法模式:基本方法(“点单”、“吃东西”和“买单”)模板方法(“请客”)具体方法抽象方法模板方法模式概述模板方法模式的定义类行为型模式模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类不改变一个算法的结构即可重定义该算法的某些特定步骤。TemplateMethodPattern:Definetheskeletonofanalgorithminanoperation,deferringsomestepstosubclasses.TemplateMethodletssubclassesredefinecertainstepsofanalgorithmwithoutchangingthealgorithm'sstructure.模板方法模式概述模板方法模式的定义是一种基于继承的代码复用技术将一些复杂流程的实现步骤封装在一系列基本方法中在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果模板方法模式的结构与实现模板方法模式的结构模板方法模式的结构与实现模板方法模式的结构模板方法模式包含以下两个角色:AbstractClass(抽象类)ConcreteClass(具体子类)模板方法模式的结构与实现模板方法模式的实现模板方法(TemplateMethod)基本方法(PrimitiveMethod)抽象方法(AbstractMethod)具体方法(ConcreteMethod)钩子方法(HookMethod)

:“挂钩”方法和空方法模板方法模式的结构与实现模板方法模式的实现钩子方法(1)“挂钩”方法:IsXXX(),返回类型为bool类型(2)空方法……//模板方法publicvoidTemplateMethod(){Open();Display();//通过钩子方法来确定某步骤是否执行if(IsPrint()){Print();}}//钩子方法publicboolIsPrint(){returntrue;}……模板方法模式的结构与实现模板方法模式的实现抽象类典型代码:abstractclassAbstractClass{//模板方法publicvoidTemplateMethod(){PrimitiveOperation1();PrimitiveOperation2();PrimitiveOperation3();}//基本方法—具体方法publicvoidPrimitiveOperation1(){//实现代码}//基本方法—抽象方法

publicabstractvoidPrimitiveOperation2();//基本方法—钩子方法publicvirtualvoidPrimitiveOperation3(){}}模板方法模式的结构与实现模板方法模式的实现具体子类典型代码:classConcreteClass:AbstractClass{publicoverridevoidPrimitiveOperation2(){//实现代码}publicoverridevoidPrimitiveOperation3(){//实现代码}}模板方法模式的应用实例实例说明某软件公司要为某银行的业务支撑系统开发一个利息计算模块,利息的计算流程如下:(1)系统根据账号和密码验证用户信息,如果用户信息错误,则系统显示出错提示。(2)如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(如活期账户和定期账户具有不同的利息计算公式)。(3)系统显示利息。现使用模板方法模式设计该利息计算模块。模板方法模式的应用实例实例类图银行利息计算模块结构图钩子方法的使用实例某软件公司要为销售管理系统提供一个数据图表显示功能,该功能的实现包括以下几个步骤:(1)从数据源获取数据。(2)将数据转换为XML格式。(3)以某种图表方式显示XML格式的数据。该功能支持多种数据源和多种图表显示方式,但所有的图表显示操作都基于XML格式的数据,因此可能需要对数据进行转换,如果从数据源获取的数据已经是XML数据,则无须转换。钩子方法的使用结构数据图表显示功能结构图钩子方法的使用实现//DataViewer.csusingSystem;namespaceTemplateMethodSample{abstractclassDataViewer{//抽象方法:获取数据publicabstractvoidGetData();//具体方法:转换数据publicvoidConvertData(){Console.WriteLine("将数据转换为XML格式。");}//抽象方法:显示数据publicabstractvoidDisplayData();//钩子方法:判断是否为XML格式的数据

publicvirtualboolIsNotXMLData(){returntrue;}//模板方法publicvoidProcess(){GetData();//如果不是XML格式的数据则进行数据转换

if(IsNotXMLData()){ConvertData();}DisplayData();}}}模板方法模式模板方法模式实例与解析实例一:银行业务办理流程在银行办理业务时,一般都包含几个基本步骤,首先需要取号排队,然后办理具体业务,最后需要对银行工作人员进行评分。无论具体业务是取款、存款还是转账,其基本流程都一样。现使用模板方法模式模拟银行业务办理流程。模板方法模式模板方法模式实例与解析实例一:银行业务办理流程模板方法模式模板方法模式实例与解析实例二:数据库操作模板对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。对于不同类型的数据库(如SQLServer和Oracle),其操作步骤都一致,只是连接数据库connDB()方法有所区别,现使用模板方法模式对其进行设计。模板方法模式模板方法模式实例与解析实例二:数据库操作模板模板方法模式的优缺点与适用环境模式优点在父类中形式化地定义一个算法,而由它的子类来实现细节的处理,在子类实现详细的处理算法时并不会改变算法中步骤的执行次序提取了类库中的公共行为,将公共行为放在父类中,而通过其子类来实现不同的行为可实现一种反向控制结构,通过子类覆盖父类的钩子方法来决定某一特定步骤是否需要执行更换和增加新的子类很方便,符合单一职责原则和开闭原则模板方法模式模式扩展关于继承的讨论模板方法模式鼓励我们恰当使用继承,此模式可以用来改写一些拥有相同功能的相关类,将可复用的一般性的行为代码移到父类里面,而将特殊化的行为代码移到子类里面。这也进一步说明,虽然继承复用存在一些问题,但是在某些情况下还是可以给开发人员带来方便,模板方法模式就是体现继承优势的模式之一。模板方法模式模式扩展好莱坞原则在模板方法模式中,子类不显式调用父类的方法,而是通过覆盖父类的方法来实现某些具体的业务逻辑,父类控制对子类的调用,这种机制被称为好莱坞原则(HollywoodPrinciple),好莱坞原则的定义为:“不要给我们打电话,我们会给你打电话(Don‘tcallus,we’llcallyou)”。在模板方法模式中,好莱坞原则体现在:子类不需要调用父类,而通过父类来调用子类,将某些步骤的实现写在子类中,由父类来控制整个过程。

模板方法模式模式扩展钩子方法的使用钩子方法的引入使得子类可以控制父类的行为。最简单的钩子方法就是空方法,也可以在钩子方法中定义一个默认的实现,如果子类不覆盖钩子方法,则执行父类的默认实现代码。比较复杂一点的钩子方法可以对其他方法进行约束,这种钩子方法通常返回一个boolean类型,即返回true或false,用来判断是否执行某一个基本方法。模板方法模式的优缺点与适用环境模式缺点需要为每一个基本方法的不同实现提供一个子类,如果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论