




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、www.ChinaSA.infoDesign Patterns模板方法模式模板方法模式www.ChinaSA.info大纲w 模板方法模式概述w 模板方法模式的结构与实现w 模板方法模式的应用实例w 钩子方法的使用w 模板方法模式的优缺点与适用环境www.ChinaSA.info模板方法模式概述w 请客吃饭示意图www.ChinaSA.info模板方法模式概述w 分析请客吃饭:请客吃饭:(1) 点单点单 (2) 吃东西吃东西 (3) 买单买单软件开发:软件开发:某个方法的实现需要某个方法的实现需要多个步骤多个步骤(类似(类似“请请客客”),其中),其中有些步骤是固定的有些步骤是固定的(类似(类
2、似“点单点单”和和“买单买单”),而),而有些步骤并不固定有些步骤并不固定,存在可变性(类,存在可变性(类似似“吃东西吃东西”)模板方法模式:模板方法模式:基本方法基本方法(“点单点单”、“吃东西吃东西”和和“买单买单”) 模板方法模板方法( “请客请客”)具体方法抽象方法www.ChinaSA.info模板方法模式概述w 模板方法模式的定义类行为型类行为型模式模式模板方法模式:模板方法模式:定义一个操作中算法的框架算法的框架,而将一些步将一些步骤延迟到子类中骤延迟到子类中。模板方法模式使得子类不改变一个算法的结构即可重定义重定义该算法的某些特定步骤某些特定步骤。Template Method
3、 Pattern: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure.www.ChinaSA.info模板方法模式概述w 模板方法模式的定义是一种是一种基于继承的代码复用技术基于继承的代码复用技术将一些复杂流程的将一些复杂流程的实现步骤实现步骤封
4、装在一系列封装在一系列基本方法基本方法中中在抽象父类中提供一个称之为在抽象父类中提供一个称之为模板方法模板方法的方法来的方法来定义定义这些基本方法的执行次序这些基本方法的执行次序,而通过其子类来覆盖某些,而通过其子类来覆盖某些步骤,从而使得步骤,从而使得相同的算法框架相同的算法框架可以可以有不同的执行结有不同的执行结果果www.ChinaSA.info模板方法模式的结构与实现w 模板方法模式的结构.PrimitiveOperation1();.PrimitiveOperation2();.PrimitiveOperation3();.AbstractClassabstract +Templat
5、eMethod ()PrimitiveOperation1 ()PrimitiveOperation2 ()PrimitiveOperation3 ().ConcreteClass+PrimitiveOperation1 ()PrimitiveOperation2 ().www.ChinaSA.info模板方法模式的结构与实现w 模板方法模式的结构模板方法模式包含以下两个角色:模板方法模式包含以下两个角色: AbstractClass(抽象类) ConcreteClass(具体子类)www.ChinaSA.info模板方法模式的结构与实现w 模板方法模式的实现模板方法模板方法 (Templat
6、e Method)基本方法基本方法 (Primitive Method)抽象方法(Abstract Method)具体方法(Concrete Method)钩子方法(Hook Method)www.ChinaSA.info模板方法模式的结构与实现w 模板方法模式的实现钩子方法钩子方法 (1) “挂钩”方法: IsXXX(),返回类型为bool类型 (2) 空方法/模板方法模板方法public void TemplateMethod() Open();Display();/通过钩子方法来确定某步骤是否执行通过钩子方法来确定某步骤是否执行if (IsPrint() Print();/钩子方法钩子方
7、法public Boolean IsPrint() return true;www.ChinaSA.info模板方法模式的结构与实现w 模板方法模式的实现抽象类典型代码:抽象类典型代码:abstract class AbstractClass /模板方法模板方法public void TemplateMethod() PrimitiveOperation1(); PrimitiveOperation2(); PrimitiveOperation3();/基本方法基本方法具体方法具体方法public void PrimitiveOperation1() /实现代码/基本方法基本方法抽象方法抽象方
8、法 public abstract void PrimitiveOperation2(); /基本方法基本方法钩子方法钩子方法public virtual void PrimitiveOperation3() www.ChinaSA.info模板方法模式的结构与实现w 模板方法模式的实现具体子类典型代码:具体子类典型代码:class ConcreteClass extends AbstractClass public override void PrimitiveOperation2() /实现代码public override void PrimitiveOperation3() /实现代码
9、www.ChinaSA.info模板方法模式的应用实例w 实例说明某软件公司要为某银行的业务支撑系统开发一个利息计算模块,利息的计算流程如下:(1) 系统根据账号和密码验证用户信息,如果用户信息错误,则系统显示出错提示。(2) 如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(如活期账户和定期账户具有不同的利息计算公式)。(3) 系统显示利息。现使用模板方法模式设计该利息计算模块。www.ChinaSA.info模板方法模式的应用实例w 实例类图银行利息计算模块结构图银行利息计算模块结构图Accountabstract +Validate (string account,
10、string password)CalculateInterest ()Display ()Handle (string account, string password).: bool: void: void: voidCurrentAccount+ CalculateInterest ().: voidSavingAccount+ CalculateInterest ().: voidwww.ChinaSA.info模板方法模式的应用实例w 实例代码 (1) Account:账户类,充当抽象类:账户类,充当抽象类 (2) CurrentAccount:活期账户类,充当具体子类:活期账户类,
11、充当具体子类 (3) SavingAccount:定期账户类,充当具体子类:定期账户类,充当具体子类 (4) 配置文件配置文件App.config (5) Program:客户端测试类:客户端测试类演示演示参考代码参考代码 (DesignPatternTemplateMethodSample)www.ChinaSA.info模板方法模式的应用实例w 结果及分析如果需要更换或增加如果需要更换或增加具体子类具体子类,无须修改源代码,只,无须修改源代码,只需修改配置文件需修改配置文件App.config即可,即可,符合开闭原则符合开闭原则 账号:张无忌密码:123456按定期利率计算利息!按定期利率
12、计算利息!显示利息!www.ChinaSA.info钩子方法的使用w 实例某软件公司要为销售管理系统提供一个数据图表显示功能,该功能的实现包括以下几个步骤:(1) 从数据源获取数据。(2) 将数据转换为XML格式。(3) 以某种图表方式显示XML格式的数据。该功能支持多种数据源和多种图表显示方式,但所有的图表显示操作都基于XML格式的数据,因此可能需要对数据进行转换可能需要对数据进行转换,如果从数据如果从数据源获取的数据已经是源获取的数据已经是XML数据数据,则则无须转换无须转换。www.ChinaSA.info钩子方法的使用w 结构数据图表显示功能结构图数据图表显示功能结构图DataView
13、erabstract +GetData ()ConvertData ()DisplayData ()IsNotXMLData ()Process ().: void: void: void: bool: voidXMLDataViewer+GetData ()DisplayData ()IsNotXMLData ().: void: void: boolwww.ChinaSA.info钩子方法的使用w 实现演示演示参考代码参考代码 (DesignPatternTemplateMethodSample)abstract class DataViewer /抽象方法:获取数据 public abs
14、tract void GetData(); /具体方法:转换数据 public void ConvertData() system.out.println(将数据转换为XML格式。); /抽象方法:显示数据 public abstract void DisplayData(); /钩子方法:判断是否为钩子方法:判断是否为XML格式的数据格式的数据 public Boolean IsNotXMLData() . return ; /模板方法 public void Process() GetData(); /如果不是如果不是XML格式的数据则进行数据转换格式的数据则进行数据转换 if (IsNo
15、tXMLData() ConvertData(); DisplayData(); www.ChinaSA.info模板方法模式的优缺点与适用环境w 模式优点 在父类中形式化地定义一个算法,而由它的在父类中形式化地定义一个算法,而由它的子类来实现细节的处理,子类来实现细节的处理,在子类实现详细的在子类实现详细的处理算法时并不会改变算法中步骤的执行次处理算法时并不会改变算法中步骤的执行次序序 提取了类库中的公共行为,提取了类库中的公共行为,将公共行为放在将公共行为放在父类中父类中,而通过其子类来实现不同的行为,而通过其子类来实现不同的行为 可实现一种反向控制结构可实现一种反向控制结构,通过子类覆盖
16、父,通过子类覆盖父类的钩子方法来决定某一特定步骤是否需要类的钩子方法来决定某一特定步骤是否需要执行执行 更换和增加新的子类很方便,更换和增加新的子类很方便,符合单一职责符合单一职责原则和开闭原则原则和开闭原则www.ChinaSA.info模板方法模式的优缺点与适用环境w 模式缺点需要为每一个基本方法的不同实现提供需要为每一个基本方法的不同实现提供一个子类,一个子类,如果父类中可变的基本方法如果父类中可变的基本方法太多,将会导致类的个数增加太多,将会导致类的个数增加,系统会,系统会更加庞大,设计也会更加抽象(可结合更加庞大,设计也会更加抽象(可结合桥接模式桥接模式)www.ChinaSA.info模板方法模式的优缺点与适用环境w 模式适用环境一次性实现一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防汛日常应急知识培训课件
- 9.18事变防空演练方案3篇2025
- 建筑防水工程公司合伙协议书
- 达标工程工作实施方案(3篇)
- 艺术品买卖合同注意事项
- 影视产业全球市场走势与预测
- 借款合同个人公司3篇
- 风湿安泰片不良反应风险评估模型构建-洞察及研究
- 转让合同协议书样本5篇
- 老年骨质疏松椎体骨折术后护理查房
- 婚宴酒店开业活动方案
- 2024年成都新都投资集团有限公司招聘笔试真题
- 企业统借统还管理制度
- 蜂窝无源物联网标签技术白皮书
- 盆底重建术并发症
- 新解读《HJ 694 - 2014水质 汞、砷、硒、铋和锑的测定 原子荧光法》新解读
- 2025至2030中国挠性覆铜板FCCL行业市场发展分析及应用领域与发展前景报告
- 【苏州】2024年江苏苏州昆山市人民检察院下属事业单位招聘编外工作人员7人笔试附带答案详解
- 2025年全国统一高考语文试卷(全国一卷)含答案
- 2025年《数字孪生与虚拟调试技术应用》课程标准
- 医院价格公示管理制度
评论
0/150
提交评论