设计模式之模板模式

目录

简介

创建过程

定义抽象类

实现抽象类1

实现抽象类2

总结


公司的主营业务中涉及不同渠道进来的客源,针对每一种来源都写一遍业务会造成代码逻辑的不清晰,并且后续维护困难,针对这种情况,主管提出代码需要重构,耦合的情况下(不同渠道进来客源可能会执行某些相同操作)还要分清各个渠道来源,方便后续维护,这里就用到了我们熟悉的模板设计模式。

简介

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。图例如下:

创建过程

定义抽象类

public abstract class Game {

    abstract void init();
    abstract void startPlay();
    abstract void endPlay();
    protected void exit(){
        System.out.println("end.....");
    }

    public final void play(){
        this.init();
        this.startPlay();
        this.endPlay();
        this.end()
    }

}

实现抽象类1

class WowGame extends Game{
    @Override
    void init() {
        System.out.println("WowGame....init");
    }

    @Override
    void startPlay() {
        System.out.println("WowGame....startPlay");
    }

    @Override
    void endPlay() {
        System.out.println("WowGame....endPlay");
    }
}

实现抽象类2

class FootBallGame extends Game{
    @Override
    void init() {
        System.out.println("FootBallGame....init");
    }

    @Override
    void startPlay() {
        System.out.println("FootBallGame....startPlay");
    }

    @Override
    void endPlay() {
        System.out.println("FootBallGame....endPlay");
    }
}

针对不同渠道的数据,涉及相同的操作可以在抽象类中统一实现如exit()方法。

总结

优点:

  • 封装不变部分,扩展可变部分。把认为不变部分的算法封装到父类中实现,而可变部分的则可以通过继承来继续扩展。
  • 提取公共部分代码,便于维护。
  • 行为由父类控制,子类实现。

缺点:

算法骨架需要改变时需要修改抽象类。

按照设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类负责完成具体的事务属性和方法,但是模板方式正好相反,子类执行的结果影响了父类的结果,会增加代码阅读的难度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值