设计模式学习(十六) 模板方法模式

场景:

  -- 客户到银行办理业务

    1:取号排队

    2:办理具体现金/转账/企业/个人/理财业务

    3: 给银行工作人员评分

模板方法介绍;

  -- 模板方法模式是编程中经常用到的模式,它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤

核心:

  -- 处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用模板方法模式。将这个节点的代码实现转移给子类完成。即:处理步骤父类中定义好,具体实现延迟到子类中

银行业务代码实现:

package templateMethod;

public abstract class BankTemplateMethod {

    public void takeNumber(){
        System.out.println("取号排队");
    }

    public abstract void  transact();

    public void evaluate(){
        System.out.println("反馈评分");
    }

    //模板方法
    public final void process(){

        this.takeNumber();
        this.transact();
        this.evaluate();
    }
}

模板

package templateMethod;

public class Client {

    public static void main(String[] args){
        BankTemplateMethod btm = new DrawMoney();

        btm.process();

        //采用匿名内部类
        BankTemplateMethod btm2 = new BankTemplateMethod(){

            @Override
            public void transact() {
                System.out.println("我要存钱");

            }

        };

        System.out.println();
        btm2.process();

    }

}

class DrawMoney extends BankTemplateMethod{

    @Override
    public void transact() {
        System.out.println("我要取钱");

    }

}

客户端与模板实现

好莱坞原则:

“Don‘t call me, we‘ll call you back”.

  -- 在软件开发中我们可以将call翻译为调用。子类不能调用父类,而通过父类调用子类。这些调用步骤已经在父类中写好了,完全由父类控制整个过程

应用场景:

时间: 2024-10-15 03:32:05

设计模式学习(十六) 模板方法模式的相关文章

设计模式学习笔记之模板方法模式

模板方法模式 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 模板即是一个方法.此方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现.这可以保证算法结构保持不变,同时由子类提供部分实现. 说明: 1.为了防止子类改变模板方法中的算法,可以将模板方法声明为final: 2.策略模式和模板方法模式都封装算法,一个用组合,一个用继承: 3.工厂方法是模板方法的一种特殊版本:

从王者荣耀看设计模式(十六.建造者模式)

从王者荣耀看设计模式(建造者模式) 一.简介 为了玩王者荣耀的游戏体验感,不少玩家都会选择花钱购买自己常用英雄的皮肤.一方面,购买的皮肤通常要比原画更加"炫酷".另一方面,购买的英雄皮肤常常伴随有特殊的回城特效与攻击技能特效. 二.模式动机 不管在生活中还是软件系统中,都存在一个包含多个组成部件的复杂对象,如汽车,它包括车轮.方向盘.发动机等各种部件.组成复杂对象的这些部件之间或许还会一定的约束,若某些属性没有赋值可能无法构成完整产品使用.如,电子邮件包含地址.收件人姓名.联系方式.创

设计模式学习总结(六)--外观模式

定义 外观模式(Facade)隐藏了系统的复杂性,只向客户端提供了一个可以访问系统的接口.这种类型的设计模式属于结构性模式.为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用. 简单来说,外观模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用.这个模式中,设计到3个角色. 客户角色:通过调用门面角色来完成要实现的功能. 门面角色:外观模式的核心.它被客户角色调用,它熟悉子系统的功能.内部根据客户角色的需求预定了几种功能的组合. 子系统角色:实现了子系

JavaScript设计模式与开发实践 模板方法模式

一.模板方法模式的定义和组成 模板方法模式是一种只需使用继承就可以实现的非常简单的模式. 模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类.通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序.子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法. 二.第一个例子--Coffee or Tea 我们先来泡一杯咖啡,泡咖啡的步骤通常如下: 把水煮沸 用沸水冲泡咖啡 把咖啡倒进杯子 加糖和牛奶 var Coffee

C#设计模式之十六观察者模式(Observer Pattern)【行为型】

原文:C#设计模式之十六观察者模式(Observer Pattern)[行为型] 一.引言 今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份)把所有的模式写完,2018年,新的一年写一些新的东西.今天我们开始讲"行为型"设计模式的第四个模式,该模式是[观察者模式],英文名称是:Observer Pattern.还是老套路,先从名字上来看看."观察者模式"我第一次看到这个名称,我的理解是,既然有&quo

结构型设计模式对比 设计模式(十六)

结构型设计模式 结构型模式关注于整体最终的结构,通过继承和组合,构建出更加复杂的结构 进而提供更加强大的逻辑功能 七种结构型模式 适配器模式(Adapter Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 代理模式(Proxy Pattern) 桥接模式(Bridge Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 所有的结构型设计模式在逻辑上都各自不同程度的隐含了“间

Java设计模式(十) 备忘录模式 状态模式

(十九)备忘录模式 备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象. class Memento{ private String value; public Memento(String value){ this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } class Storage

设计模式学习03—抽象工厂模式

1.动机与定义 工厂模式中,一个工厂仅仅能提供一个或一类产品,当产品种类较多,形成产品系列(比方我们要创建跨平台的button,菜单,文本框等等一系列GUI控件: 单纯使用工厂模式会产生大量工厂,并且后期维护也不方便,我们能够从产品中找到规律,假设产品等级相对固定,以后仅仅会新增产品族,那么我们就能够把整个产品族放到一个工厂创建,以后新增其它系统产品族也很方便,例如以下图: 这样的模式就是抽象工厂,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则须要面对多个产品等级结构,一个工厂等级结构能

云计算设计模式(十)——守门员模式

云计算设计模式(十)——守门员模式 通过使用充当客户端和应用程序或服务之间的代理,验证和进行消毒的请求,并将它们之间的请求和数据的专用主机实例保护的应用程序和服务.这可以提供一个额外的安全层,并限制了系统的攻击面. 背景和问题 应用程序通过接受和处理请求揭露它们的功能提供给客户.在云托管方案,应用程序暴露终端客户机连接,一般包括代码来处理来自客户端的请求.此代码可以执行认证和验证,一些或所有请求的处理,并有可能访问存储等服务代表客户端的. 如果恶意用户能够危及系统和访问应用程序的托管环境,它使用

C#设计模式之十九策略模式(Stragety Pattern)【行为型】

原文:C#设计模式之十九策略模式(Stragety Pattern)[行为型] 一.引言 今天我们开始讲"行为型"设计模式的第七个模式,该模式是[策略模式],英文名称是:Stragety Pattern.在现实生活中,策略模式的例子也非常常见,例如,在一个公司中,会有各种工作人员,比如:有的是普通员工,有的是软件架构师,有的是部门经理,当然也会有公司的CEO.这些工作人员负责的工作不同,担负的责任不同,自然得到的报酬也就不同了.每种工作人员都有自己的工资,但是每个工种的工作人员的工资的