《模板模式》被安排明明白白的人生

50 篇文章 0 订阅
44 篇文章 0 订阅

​ 大家好,我是洪爵,今天打开手机浏览网页,满满都是设计模式。

模板模式,是属于设计模式中的行为性模式,该类设计模式特别关注对象之间的通信。

​ 很多时候我们会发现,在设计一个通用系统的时候,我们已经知晓或总结出整个SOP流程确定了每一个步骤的执行顺序,但是具体的步骤实现还不清楚,因为会根据业务场景的不同,具体的实现也会不同,但是整个流程已经是确定下来的了。比如说你要出行,选择的交通工具是飞机,那么整个过程肯定包含有三个步骤,第一个是buy()买票,第二个是开始旅程,第三个是结束旅程。但是具体实现可能每个航空公司有所差异,比如说开始旅程中,不同航空公司可能会提供不一样的服务,每个飞机桌位的舒适度等等。

更形象的例子就是ppt,word文档这些了,这类规定了流程或者格式的实例定义成一个模板,允许使用者去按照自己的需求去更新它。

​ 模板模式定义了操作中的算法骨架,而将具体实现放在了子类中,让子类在不改变该算法结构的前提下,去填充该算法的某些或全部步骤。

​ 优点:封装了不变的部分,扩展可变的部分。符合开闭原则。便于后续的维护。

​ 缺点:每个具体实现都要定义一个新的子类。

模式的结构:

抽象的模板类->负责给出算法的轮廓和骨架,由一个模板方法和若干个基本方法组成。

模板方法:定义了整个流程,按照某种顺序去调用若干个基本方法。

基本方法:抽象方法、具体方法、钩子方法。

抽象方法:在抽象模板类中声明,具体实现需要子类实现。

具体方法:在抽象类中已经实现,子类可以继承或者重写它。

钩子方法:在抽象类中已经实现,用于判断或者需要子类重写的空方法。

具体子类:继承抽象的模板类。

类图

在这里插入图片描述

具体代码实现:

public abstract class Game {

    abstract void initialize();

    abstract void start();

    abstract void end();

    public final void play() {

        // 初始化游戏
        initialize();

        // 开始游戏
        start();

        // 游戏结束
        end();
    }

}

public class LOLGame extends Game {

    @Override
    void initialize() {
        System.out.println("lol初始化中...");
    }

    @Override
    void start() {
        System.out.println("lol游戏开始");
    }

    @Override
    void end() {
        System.out.println("lol游戏结束");
    }
}

public class Client {
    public static void main(String[] args) {
        Game game = new LOLGame();
        game.play();
    }
}
/*
lol初始化中...
lol游戏开始
lol游戏结束
*/

​ 好啦,本章节模板模式就到这里啦!希望对你有所帮助!!!

在这里插入图片描述
愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。

道阻且长,往事作序,来日为章。

期待我们下一次相遇!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KnightHONG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值