设计模式总结:模板方法

栏目: 后端 · 发布时间: 5年前

内容简介:模板方法属于行为型设计模式,在父类中定义处理流程的框架,在子类中实现具体的处理在父类(抽象类)中定义好算法的流程,提供抽象方法,针对不同的实现交由不同的子类去实现,通过这种方式将公共代码提取出来封装在父类中,然后父类去控制行为,子类负责实现,这样当有很多子类的时候,如果要修改算法,只需要在父类中更改算法的行为即可。已支付为例,涉及AbstractPay,BankCardPay,WeChatPay三个类。

模板方法属于行为型设计模式,在父类中定义处理流程的框架,在子类中实现具体的处理

什么是模板方法

在父类(抽象类)中定义好算法的流程,提供抽象方法,针对不同的实现交由不同的子类去实现,通过这种方式将公共代码提取出来封装在父类中,然后父类去控制行为,子类负责实现,这样当有很多子类的时候,如果要修改算法,只需要在父类中更改算法的行为即可。

实现

已支付为例,涉及AbstractPay,BankCardPay,WeChatPay三个类。

AbstractPay

抽象类(父类),定义了三个抽象方法和一个控制支付流程的方法,也就是模板方法,这个方法使用final修饰,防止被重写

/**
 * @auther: chenmingyu
 * @date: 2019/2/13 16:58
 * @description: 抽象类,定义支付流程
 */
public abstract class AbstractPay {

    /**
     * 获取支付信息
     */
    abstract String getPayInfo();

    /**
     * 执行支付
     */
    abstract void executePay();

    /**
     * 支付反馈信息
     */
    abstract void payMessage();

    /**
     * 支付
     */
    public final void pay(){
        String info = getPayInfo();
        System.out.println("支付账户:"+info);
        executePay();
        payMessage();
    }
}

BankCardPay

子类实现,提供银行卡支付,继承AbstractPay类重写三个抽象方法,提供银行卡支付的实现

/**
 * @auther: chenmingyu
 * @date: 2019/2/13 17:18
 * @description: 银行卡支付
 */
public class BankCardPay extends AbstractPay{

    @Override
    String getPayInfo() {
        return "我的银行卡信息";
    }

    @Override
    void executePay() {
        System.out.println("银行卡支付了");
    }

    @Override
    void payMessage() {
        System.out.println("银行卡方式支付,发短息");
    }
}

WeChatPay

子类实现,提供微信支付,继承AbstractPay类重写三个抽象方法,提供微信支付的实现

/**
 * @auther: chenmingyu
 * @date: 2019/2/13 17:20
 * @description: 微信支付
 */
public class WeChatPay extends AbstractPay{

    @Override
    String getPayInfo() {
        return "我的微信支付信息";
    }

    @Override
    void executePay() {
        System.out.println("微信支付了");
    }

    @Override
    void payMessage() {
        System.out.println("微信方式支付,微信内发服务通知");
    }
}

测试

public static void main(String[] args) {
    BankCardPay bankCardPay = new BankCardPay();
    bankCardPay.pay();
    System.out.println("... 分割线 ...");
    WeChatPay weChatPay = new WeChatPay();
    weChatPay.pay();
}

输出

支付账户:我的银行卡信息
银行卡支付了
银行卡方式支付,发短息
... 分割线 ...
支付账户:我的微信支付信息
微信支付了
微信方式支付,微信内发服务通知

总结一下,就是抽象类封装了一个final类型的方法,方法中调用其他的抽象方法,制定业务流程,提供的抽象方法交由子类去实现。当你有多个子类实现逻辑相同时,建议使用模板方法。


以上所述就是小编给大家介绍的《设计模式总结:模板方法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法

数据结构与算法

许卓群、杨冬青、唐世渭、张铭 / 高等教育出版社 / 2004-1 / 29.50元

《数据结构与算法》把数据结构的原理和算法分析技术有机地结合在一起,系统地介绍了各种类型的数据结构和排序、检索的各种算法,还引入了一些比较高级的数据结构及相关的算法分析技术。.《数据结构与算法》分为基本数据结构、排序和检索、高级数据结构三部分。借助抽象数据类型,从逻辑结构的角度系统地介绍了线性表、字符串、二叉树、树和图等各种基本数据结构;从算法的角度讨论排序、检索和索引算法;从应用的角度介绍了一些复......一起来看看 《数据结构与算法》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具