栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

基本要点

1、核心
处理步骤父类中定义好,具体步骤延迟到子类中定义

2、介绍
模板方法定义了一个操作中的算法骨架,将某些步骤延迟到子类中去定义,这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤

3、举例
我们请客去吃饭,大概流程就是取号-----点菜------买单
但是点菜这个环节我们要等拿到菜单才能决定具体要点什么,所以我们先定义一个点菜的操作,等到了饭馆再决定点烧烤还是点火锅

4、开发畅常用场景
实现一个算法,如果存在整体步骤比较固定,某些部分易变,那我们就可以把易变部分抽象出来,供子类实现
例如Junit单元测试、数据库访问的封装(是访问Oracle还是Mysql)、servlet中关于doGet、doPost方法的调用

代码样例

我们举一个去银行办理业务的例子,我们可以去取钱,也可以去存钱
但是我们的大体流程都是:取号------办业务------评分
所以我们可以把办业务这个方法定义成钩子方法

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

    public abstract void transact();

    public void evaluate() {
        System.out.println("服务打分");
    }

    // 模板方法,把基本操作组合到一起,定义为final,子类无法重写
    public final void process() {
        this.takeNumber();

        // 钩子方法,执行时,挂在哪个子类下就调用哪个方法
        this.transact();

        this.evaluate();
    }
}

然后我们想要办理哪种业务,直接指向子类对象,实现该钩子方法即可

public class Client {
    public static void main(String[] args) {
        BankTemplate saveMoney = new SaveMoney();
        saveMoney.process();

        // 也可以通过匿名内部类来进行调用
        BankTemplate takeMoney = new BankTemplate() {
            @Override
            public void transact() {
                System.out.println("我要取钱!!");
            }
        };

        takeMoney.process();
    }
}

class SaveMoney extends BankTemplate {
    @Override
    public void transact() {
        System.out.println("我要存钱!!");
    }
}

实现结果如下

如有错误,欢迎指正

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/632264.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号