二十三种设计模式之【模板方法模式】

模板方法模式

概念

模板方法模式确实非常简单,仅仅使用了Java的继承机制

模板方法一般都会加上final关键字, 不允许覆写

功能固定, 但是有一些需要定制; 功能固定就是抽象, 需要定制就是子类实现

基本实现

首先, 需要定义一个模板抽象类, 里面包含有基本方法和模板方法

模板方法设计模式中, 包含有基本方法、模板方法;

基本方法:

​ 可以是在抽象类里面就实现的方法, 也可以是一个抽象的方法, 由子类实现;

模板方法:

​ 决定基本方法的执行顺序, 最后的最后, 模板方法是由子类的对象来调用; 因为模板类是一个抽象的类, 无法实例化

模板方法 1_1

应用场景

模板类

public abstract class MsgTemplate {
    /**
     * 下面这三个都是模板设计模式里面的基本方法
     * 在抽象类里面可以有实现, 同时也可以由子类实现, 但是最后调用的时候还是
     * 子类的对象调用
     */
    //由子类实现的方法
    protected abstract void start();
    //春节短信模板
    public void chunJie() {
        System.out.println("春节到,给您拜年了:一拜全家好!二拜困难少!三拜烦恼消!四拜不变老!" +
                "五拜幸福绕!六拜忧愁抛!七拜收入高!八拜平安罩!九拜乐逍遥!");
    }
    //国庆节短信模板
    public void guoQing() {
        System.out.println("平淡的辞藻,堆砌祝福的美好;不需多思考,真心的问候送到。" +
                "国庆佳节,愿快乐为你笑弯腰,钞票直向你奔跑,幸福不离分分秒,吃好玩好休息好!");
    }


    /**
     * MsgTemplate 中定义的模板方法, 后续的方法直接调用这个方法
     * 最后还是子类的对象调用这个模板方法
     * @param holiday
     */
    public  void sendMSg(Holiday holiday){
        switch (holiday){
            case GUO_QING:
                start();
                guoQing();
                break;
            case NEW_YEAR:
                start();
                chunJie();
                break;
        }
    }
}

在定义Holiday的时候使用到了Enum

public enum Holiday {
    //国庆,劳动,春节;
    GUO_QING, LAO_DONG, NEW_YEAR;

}

场景类

public class Client {
    public static void main(String[] args) {
        /**
         * 需求:实现一个万能节日短信模板系统
         *      该短信模板具备发短信的功能,提供发短信的方法,该方法可以根据传入的实参不同,发送不同节日短信
         *      该短信模板可以让不同的子类实现,比如给领导发短信的类、给朋友发短信的类、给女友发短信的类
         */
        //new出一个子类对象
        Msg msg = new Msg();
        //使用子类对象调用模板方法
        msg.sendMSg(Holiday.GUO_QING);
    }
}

小结:

模板方法只使用了抽象类, 可以看做是把很多个基本方法集合在一起放在一个模板方法里面; 基本方法里面可以有子类的个性实现, 但是定义还是在抽象类里面;

最后的最后还是用子类的对象来调用模板方法, 因为子类有个性的实现, 其他类里面没有;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值