设计模式之模板方法的设计模式

1. 模板方法的作用
  • 在软件的开发过程中,一个算法它的整体步骤很固定、通用,这些步骤已经在父类中写好;但还有一些部分易变、不通用,可以抽象出来,让子类实现。
  • 不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
2.实现的方法
  • 定义:定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现
  • 准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。
3.适应场景
  • 一次性实现一个算法不变的部分,并将可变的行为留给子类来实现
  • 各子类中公共的行为被提取出来并集中到一个公共父类中,从而避免代码重复
  • 控制子类扩展,子类必须遵守算法规则。
  • 实现一些操作时,整体步骤很固定,但是呢。就是其中一小部分容易变,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
    在这里插入图片描述
4.优缺点
  • 优点
  1. 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。

  2. 子类实现算法的某些细节,有助于算法的扩展。

  3. 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

  • 缺点
  1. 类数目的增加
  2. 增加了系统实现的复杂度
  3. 继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍
5.举例
/**
 * 模版方法接口
 * 场景:第三方短信接口服务方调用联通运行商、移动运营商 实现的场景
 *  1.开始 记录开始日志
 *  2.调用 接口进行代码逻辑处理(不同运行商逻辑处理可能不同)
 *  3.返回结果 记录结束日志
 *
 *  从上面这几个步骤来看,第一步与第三步的操作都是一样的。只有第二步需要做单独的处理。
 *    因为开始记录日志、结束记录日志做的都是统一处理,只有业务逻辑处理单独的方法进行处理(抽象类)。
 */
public abstract class MessageTemplate {
    public void sendMsg() {
        //1. 记录开始日志
        addStartLog();

        //2.调用具体的运营商发送消息
        httpRequest();

        //3.结束结束日志
        addEndLog();
    }

    /**
     *  不同的运营商 请求出来可能不同
     */
    public abstract void httpRequest();

    /**
     *  调用方法开始时记录日志操作
     */
    private void addStartLog() {

        System.out.println("调用运行商开始时记录日志");
    }

    /**
     *  调用方法结束时记录日志
     */
    private void addEndLog() {
        System.out.println("调用运行商结束时记录日志");
    }

}

/**
 *  接口实现类
 */
public class Liantong extends MessageTemplate {
    @Override
    public void httpRequest() {
        System.out.println("调用联通接口逻辑处理执行...");
    }
}

/**
 *   接口实现类
 */
public class YiDong extends MessageTemplate {
    @Override
    public void httpRequest() {
        System.out.println("调用移动接口逻辑处理执行...");
    }
}

/**
 *  客户端调用
 */
public class ClientTemplate {
    public static void main(String[] args) {
        //初始化
        MessageTemplate yiDong = new YiDong();
        //调用方法执行
        yiDong.sendMsg();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值