模版模式

一句话定义

定义操作的算法框架,将具体实现步骤延迟到子类实现,使得子类可以不改变结构算法而改变特定的步骤。

使用场景

1. 多个子类含有相同逻辑方法,能够提出
2. 重要、复杂算法,提出成模版模式

实现要点

1. 具体流程方法抽象出来
2. 流程操作定义为final方法,杜绝子类操作

情景假设

把大象放入冰箱,分为几个步骤?

实现步骤

1. 创建放入冰箱模版,规定执行步骤以及顺序
/**
 * 模版抽象类
 * 定义具体的流程方法,final的流程执行方法
 *  * @author fengzhen
 * @version 1.0, 2017/2/14
 */
public abstract class Template {
    /**
     * 打开冰箱
     */
    abstract void openIcebox();

    /**
     * 放入大象
     */
    abstract void putIn();

    /**
     * 关上冰箱
     */
    abstract void closeIcebox();

    /**
     * 动作
     */
    abstract void action();

    /**
     * 顺序执行动作,final禁止修改流程
     */
    public final void putInSomething(){
        openIcebox();
        putIn();
        closeIcebox();
        action();
    }
}
2. 创建具体的放入类,具体实现每个步骤
  • 大象放入类
/**
 * 把大象放入冰箱
 *  * @author fengzhen
 * @version 1.0, 2017/2/14
 */
public class ElephantPut extends Template{
    @Override
    void openIcebox() {
        Log.i("info", "openIcebox: ==++打开冰箱!");
    }

    @Override
    void putIn() {
        Log.i("info", "putIn: ==++放入大象!");
    }

    @Override
    void closeIcebox() {
        Log.i("info", "closeIcebox: ==++关上冰箱!");
    }

    @Override
    void action() {
        Log.i("info", "action: ==++哈哈哈!!!");
    }
}
  • 小明放入类

/**
 * 把小明放入冰箱
 *
 * @author fengzhen
 * @version 1.0, 2017/2/14
 */
public class XiaoMingPut extends Template{
    @Override
    void openIcebox() {
        Log.i("info", "openIcebox: ==++打开冰箱!");
    }

    @Override
    void putIn() {
        Log.i("info", "putIn: ==++放入小明!");
    }

    @Override
    void closeIcebox() {
        Log.i("info", "closeIcebox: ==++关上冰箱!");
    }

    @Override
    void action() {
        Log.i("info", "action: ==++呃。。。。");
    }
}
3. 放入大象,小明
        // 模版模式
        ElephantPut elephantPut = new ElephantPut();
        elephantPut.putInSomething();
        XiaoMingPut xiaoMingPut = new XiaoMingPut();
        xiaoMingPut.putInSomething();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值