JavaScript设计模式--命令、模板、职责链

设计模式导航


\bullet 命令模式

    \ast 目标

        将功能封装并提供给调用对象

    \ast 应用场景

           撤销、富文本编辑器

    \ast 代码示例

        假设我现在正在使用韩信打农药,则韩信(Hs)即命令的接收者,我(User)即命令的发送者,Command即命令中心。当我选完英雄,我就拿到了韩信的指令器,在需要开大解控或杀敌的时候,就只需要向指令器发送开大指令即可,至于这个命令背后都做了什么,我是不需要关心的(就比如韩信开大需要先将自身控制解除再挥舞对敌人造成伤害)

\bullet 模板方法模式

    \ast 目标

        组织模块调用

    \ast 应用场景

        模块的初始化过程

    \ast 代码示例

        拿打一把王者来说,需要登录账号,选择英雄,然后等待游戏加载,最后进入战场。每一个步骤对应一个api,而这个api的谁先谁后调用即模板方法。

        它更多的是提供了一个最佳实践,一般有两部分组成:抽象类和实现类,前者用以定义框架规则后者负责具体实现

        对于炒菜这件事是很笼统的,做西红柿炒鸡蛋、水煮肉片还是炒方便面都是炒菜的一个具体体现。不管是做那样,无外乎食材清洗--起锅烧油--油热后食材入锅--烹饪一定时间--盛盘子里。但是每一样菜的具体做法又不太一样,西红柿炒鸡蛋你得有西红柿吧,水煮肉片你食材得有肉吧

        因此关于做菜可以认为是一个抽象类,它也许长这样

(定义一个炒菜框架,它的烹饪时间和要入锅的原材料是不同的因此要求子类必须实现,它还提供了合理的烹饪方式init)

        那我今天要做的青椒鸡蛋应许是这样的

\bullet 职责链模式

    \ast 目标

        链式调用,强制按照步骤重复执行某一类动作

    \ast 应用场景

       antd的Form表单校验(可配合策略模式)

    \ast 代码示例

        当我们发起离职申请后,是需要经过层层审批的,一般来说是先直属leader审批,后转交部门经理审批,然后转交老板最后再转交到人事的过程。每一个流程都是对审批动作的重复

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容