设计模式-行为型之模板方法模式
来源:互联网 发布:软件需求分析推荐 编辑:程序博客网 时间:2024/04/28 11:18
模式动机
模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。在模板方法模式中,我们需要准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来让子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意。模板方法模式体现了面向对象的诸多重要思想,是一种使用频率较高的模式。
模式定义
定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模式结构
抽象类:AbstractClass
具体子类:ConcreteClass
代码示例
在银行办理业务时,一般都包含几个基本步骤,首先需要取号排队,然后办理具体业务,最后需要对银行工作人员进行评分。无论具体业务是取款、存款还是转账,其基本流程都一样。现使用模板方法模式模拟银行业务办理流程。
//抽象类public abstract class BankTemplateMethod { public void takeNumber() { System.out.println("取号排队。"); } //办理业务 public abstract void transact(); public void evaluate() { System.out.println("反馈评分。"); } public void process() { this.takeNumber(); this.transact(); this.evaluate(); }}
//具体子类public class Deposit extends BankTemplateMethod{ public void transact() { System.out.println("存款"); }}
public class Transfer extends BankTemplateMethod{ public void transact() { System.out.println("转账"); }}
public class Client { public static void main(String a[]){ BankTemplateMethod deposit = new Deposit(); BankTemplateMethod transfer = new Transfer(); deposit.process(); System.out.println("---------------------"); transfer.process(); }}
总结
模板方法模式相对比较简单,在模板方法模式的使用过程中,要求开发抽象类和开发具体子类的设计师之间进行协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。实现这些具体逻辑步骤的方法称为基本方法(如例子中的takeNumber()、transact()、evaluate()),而将这些基本法方法汇总起来的方法称为模板方法(如例子中的process())。模板方法模式包含两个角色:在抽象类中定义一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,同时,在抽象类中实现了一个模板方法,用于定义一个算法的骨架;具体子类是抽象类的子类,用于实现在父类中定义的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中实现的具体基本操作
- java设计模式(行为型)之模板方法模式
- 设计模式-行为型之模板方法模式
- Java设计模式(行为型)之-模板方法模式
- 行为型设计模式-模板方法模式
- 行为型设计模式-模板方法模式
- Java设计模式之模板方法模式或者说模板设计模式(属于行为型)
- 行为型模式之模板方法模式
- 【JavaScript设计模式】行为型设计模式--模板方法模式
- [设计模式-行为型03]-模板方法
- 设计模式-行为-模板方法
- 设计模式 行为模式之模板模式
- 设计模式 - 行为型模式 - 模板方法模式
- 【设计模式】行为模式之Template Method模板方法
- Java设计模式之行为型模式(模板模式)
- 【行为型模式】模板方法模式(template method)之23种java设计模式
- 模板方法--行为型模式之四
- 行为型之模板方法模式
- GoF23种设计模式之行为型模式之模板方法
- PerformSelector
- 数据结构—判断两个链表是否相交,寻找两个链表的相交节点
- eclipse里面调试maven插件
- 交通灯
- drools初识(一)
- 设计模式-行为型之模板方法模式
- 第二周项目3 体验复杂度(1)
- 《剑指offer》链表中环的入口结点
- 黑马程序员—java基础—内部类
- HDU 5442 Favorite Donut 后缀数组
- Shape of HDU 几何问题判断多边形凹凸性
- oracle 中的ifnull-----> nvl
- Android 没有SD卡,利用手机存储下载、自动安装,解决Parse error when parsing manifest问题
- SQL基础