
设计模式
背太阳的牧羊人
管它什么真理无穷,进一寸有一寸的欢喜。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
中介者模式
比如有很多个对象,对象之间又频繁地相互访问,class A { constructor() { this.number = 0; } setNumber(num, m) { this.number = num; if (m) { m.setB(); } }}class ...原创 2019-12-20 14:23:47 · 143 阅读 · 0 评论 -
备忘录模式
随时记录一个对象的状态变化,随时可以恢复对象之前的某个状态(如撤销功能)。//备忘类class Memento { constructor(content) { this.content = content; } getContent() { return this.content; }}//备忘列表class CareT...原创 2019-12-20 13:46:58 · 124 阅读 · 0 评论 -
命令模式
执行命令时,发布者和执行者分开举例://接收者class Receiver { exec() { console.log('执行'); }}//命令者class Command { constructor(receiver) { this.receiver = receiver; } cmd() { ...原创 2019-12-20 12:51:40 · 135 阅读 · 0 评论 -
职责链模式
一步操作需要多个职责角色来完成,把这些角色都分开,然后用一个链串起来,将发起者和各个处理者进行隔离。比如:请假审批class Action { constructor(name) { this.name = name; this.nextAction = null; } setNextAction(action) { th...原创 2019-12-20 11:09:18 · 124 阅读 · 0 评论 -
享元模式&策略模式
享元模式就是共享元数据,比如共享内存(主要考虑内存而非效率),相同的数据共享使用。策略模式不同策略分开处理,避免出现大量if...else或者switch...case。比如:class User { constructor(type) { this.type = type; } buy() { if (this.type === ...原创 2019-12-20 10:11:49 · 939 阅读 · 0 评论 -
桥接模式
抽象和实现分离,解耦,使得二者可以独立变化。比如:这里有各种颜色的图形可以把四个图形分别画出来,但是这会让画图形和添加颜色混在一块儿了。我们可以分开:代码://保留颜色class Color { constructor(name) { this.name = name; }}class Shape { constructor(name,...原创 2019-12-19 16:04:19 · 217 阅读 · 0 评论 -
原型模式
实际上就是clone自己,生成一个新对象。Object.create() 用到了原型模式的思想。举例://一个原型对象const myPrototype = { getName: function () { console.log(`${this.firstName} ${this.lastName}`); return `${this.firstN...原创 2019-12-19 15:44:39 · 127 阅读 · 0 评论 -
工厂模式
将new操作单独封装,遇到new时就要考虑是否可以使用工厂模式。举例:class Product { constructor(name){ this.name = name; } init(){ console.log(this.name); } fun1(){ console.log('fn1'+thi...原创 2019-12-19 15:16:49 · 170 阅读 · 0 评论 -
状态模式
一个对象有状态变化,每次变化都会触发一个逻辑,不能总是用if...else来控制。比如交通信号红绿灯,收藏,关注,,举例://状态单独抽象出来class State{ constructor(color){ this.color = color; } handle(context){ console.log(`turn to ${thi...原创 2019-12-19 14:46:12 · 112 阅读 · 0 评论 -
迭代器模式
顺序访问一个集合,基本上是数组形式的,对象不是有序的列表无法顺序访问。使用者无需知道集合的内部结构。举例: <p>jquery</p> <p>jquery</p> <p>jquery</p>let arr = [1, 2, 3];let nodeList = document.getElementsB...原创 2019-12-18 17:19:50 · 146 阅读 · 0 评论 -
观察者模式
发布&订阅一对多举例一://主题,保存状态,状态变化后触发所有观察者对象class Subject { constructor() { this.state = 0; this.observers = []; } getState() { return this.state; } set...原创 2019-12-18 15:29:46 · 118 阅读 · 0 评论 -
外观模式
为子系统中的一组接口提供一个高层接口,使用者使用这个高层接口。比如:去医院看病,让接待员帮我们去挂号,门诊,划价,取药。在业务中用的比较多。比如当涵盖多种参数时:...原创 2019-12-18 14:43:08 · 120 阅读 · 0 评论 -
代理模式
使用者无权访问目标对象,中间加代理,通过代理做授权和控制。举例一:class ReadImg { constructor(fileName) { this.fileName = fileName; this.loadFromDisk(); } display() { console.log('display ' + thi...原创 2019-12-18 14:27:37 · 141 阅读 · 0 评论 -
装饰器模式
在不改变其原有的结构和功能下为对象添加新功能。举例一:class Circle { constructor(name) { this.name = name; } draw() { console.log(`图的形状:${this.name}`); }}class Decorator { constructor(co...原创 2019-12-18 11:32:36 · 147 阅读 · 0 评论 -
适配器模式
旧接口格式和使用者不兼容,中间加一个适配转换接口。比如生活中去香港或国外,电源接口跟国内不同就得需要一个转换器。应用:封装旧接口Vue computed方法举例一:class Adaptee{ constructor(name){ this.name = name; } specificRequest(){ return `...原创 2019-12-17 17:54:39 · 118 阅读 · 0 评论 -
单例模式
单例模式下每次获取的都是同一个实例。符合单一职责原则,只实例化唯一的对象,在系统中会被唯一使用。应用 :购物车登录框jQuery 只有一个 $,即使页面中引用了很多个 jQuery 那也只有一个 $vuex和redux中的store也是单例模式举例一:class SingleObject { //这里的login方法不是静态方法,每初始化一个实例时,实例都会有自己的log...原创 2019-12-17 17:36:17 · 196 阅读 · 1 评论 -
理解JavaScript设计模式
设计模式 应该是分开的,从设计到模式。设计就是按照一种思路或标准来实现功能,相同功能可以有不同设计方案来实现。五大设计原则:S(Single):单一职责原则。一个程序只做好一件事,如果功能过于复杂就拆分开,每个部分保持独立。O(Open):开放封闭原则。对扩展开放,对修改封闭。增加需求时,扩展新代码而非修改已有代码。L(Liskov人名):李氏置换原则。子类能覆盖父类,父类能出现的地方子...原创 2019-10-16 14:56:07 · 191 阅读 · 0 评论 -
设计模式的例子1——抽象编程
题目:UML类图:注意车和行程是不同的类代码实现:class Car{ constructor(number,name){ this.number = number; this.name = name; }}class Kuaiche extends Car{ constructor(number,name){ ...原创 2019-10-16 16:11:03 · 269 阅读 · 0 评论 -
设计模式的例子2——抽象编程
例子:UML类图:代码实现://车辆class Car{ constructor(num){ this.num = num; }}//摄像头class Camera{ shot(car){ return { num:car.num, inTime:Date.now() ...原创 2019-10-16 16:50:51 · 143 阅读 · 0 评论