JavaScript设计模式样例十八 —— 命令模式
命令模式(Command Pattern)
定义:请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
目的:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
场景:在一个快餐店,用户向服务员点餐。服务员将用户的需求记录在清单上。
let dialog = {
show () {
console.log('show a dialog')
}
}
let animation = {
start () {
console.log('show animation')
}
}
let setCommand = (btn, cmd) => {
btn.onclick = () => {
cmd.run()
}
}
class ShowDialogCommand {
constructor (receiver) {
this.receiver = receiver
}
run () {
this.receiver.show()
}
}
class StartAnimationCommand {
constructor (receiver) {
this.receiver = receiver
}
run () {
this.receiver.start()
}
}
setCommand(btn1, new ShowDialogCommand(dialog))
setCommand(btn2, new StartAnimationCommand(animation))
Git地址:https://github.com/skillnull/Design-Mode-Example
JavaScript设计模式样例十八 —— 命令模式的更多相关文章
- JavaScript设计模式 样例二 —— 策略模式
策略模式(Strategy Pattern): 定义:定义了一族算法: 封装了每个算法: 这族的算法可互换代替. 目的:将算法的使用与算法的实现分离开来. 场景:可用来消除大量的条件分支语句. 例:J ...
- JavaScript设计模式 样例一 —— 工厂模式
工厂模式(Factory Pattern): 定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行. 目的:工厂模式是为了解耦,把对象的创建和使用 ...
- javascript设计模式学习之十六——状态模式
一.状态模式的定义 状态模式的关键是区分事务内部和外部的状态,事务内部状态改变往往会带来事务的行为改变. 状态模式中有意思的一点是,一般我们谈到封装,都是优先封装对象的行为,而非对象的状态.但在状态模 ...
- JavaScript设计模式样例四 —— 单例模式
单例模式(Singleton Pattern): 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 目的:阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例. 场景: ...
- JavaScript设计模式 样例三 —— 装饰模式
装饰模式(Decorator Pattern): 定义:在不改变原对象的情况下,动态的给对象添加一些额外的职责.就功能而言,装饰模式相比生成子类更为灵活. 目的:把类的核心职责和装饰功能区分开.可以去 ...
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...
- 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...
- Java 设计模式系列(十八)备忘录模式(Memento)
Java 设计模式系列(十八)备忘录模式(Memento) 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式.备忘录对象是一个用来存储另外一个对象内部状态 ...
- .NET设计模式(17):命令模式(Command Pattern)(转)
概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这种情况下,如何将“行为 ...
- Java设计模式菜鸟系列(十四)代理模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 代理模式(Proxy):代理模式事实上就是多一个代理类出来,替原对象进行一些 ...
随机推荐
- yolov1-yolov5 网络结构&正负样本筛选&损失计算
学习yolo系列,最重要的,最核心的就是网络模型.正负样本匹配.损失函数等三个方面.本篇汇总了yolov1-yolov5等5个版本的相关知识点,主要看点是在yolo框架搭建.初学者可以通过相关篇章搭建 ...
- 《编译原理》阅读笔记:p18
<编译原理>学习第 3 天,p18总结,总计 14页. 一.技术总结 1.assembler (1)计算机结构 要想学习汇编的时候更好的理解,要先了解计算机的结构,以下是本人学习汇编时总结 ...
- spark中各窗口函数对于窗口的要求
窗口参数: class WindowSpec private[sql]( partitionSpec: Seq[Expression], orderSpec: Seq[SortOrder], fram ...
- 为什么Linux不能在中断中睡眠
中断分析 首先来看中断的流程: 1.进入中断处理程序---> 2.保存关键上下文----> 3.开中断(sti指令)---> /* 硬中断:对应于1.2.3步骤. 在这几个步骤中,所 ...
- 一个JVM参数,服务超时率降了四分之三
先说结论:通过优化Xms,改为和Xmx一致,使系统的超时率降了四分之三 1. 背景 一个同事说他负责的服务在一次上线之后超时率增加了一倍 2. 分析 2.1 机器的监控 首先找了一台机器,看了监控 上 ...
- Nuxt3 的生命周期和钩子函数(十一)
title: Nuxt3 的生命周期和钩子函数(十一) date: 2024/7/5 updated: 2024/7/5 author: cmdragon excerpt: 摘要:本文详细介绍了Nux ...
- vulnhub - LAMPSECURITY: CTF5
vulnhub - LAMPSECURITY: CTF5 信息收集 端口扫描 nmap -sT --min-rate 10000 -p- 192.168.157.164 详细扫描 sudo nmap ...
- yb课堂 订单列表开发,完结 《四十五》
Order.vue <template> <div class="main"> <!--订单列表--> <div class=" ...
- vue中的插槽详解
插槽(slot)插槽在vue中是一种很常见的写法,让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式 一共有三种分类:默认插槽.具名插槽.作用域插槽,下面一一根据案例改造说明 1 ...
- yolov5+deepsort+slowfast复现
1.运行环境 ubuntu 18.04.1 Cuda 11.5 Python 3.8.15 torch 1.10.1+cu113 torchvision 0.11.2+cu113 2.安装PyTorc ...