
JS模式
不愿透露姓名的余菜鸟
山不向我走来,我便向山靠去
展开
-
(JS)职责链模式
(JS)职责链模式一步操作分为多个角色来完成将角色分开,使用一个链串起来class Action { constructor(name) { this.name = name; this.nextAction = null; } setNextAction(action) { this.nextAction = action; } handle() { console.log(`${this.name}审批`); if (this.nextAction != nu原创 2020-07-27 16:40:12 · 134 阅读 · 0 评论 -
(JS)状态模式
(JS)状态模式每次状态变化都会触发逻辑不能总是使用if…else判断class State { constructor(color) { this.color = color; } handle() { console.log(`turn to ${this.color} light`); context.setState(this); }}class Context { constructor() { this.state = null; } getS原创 2020-07-26 16:46:44 · 191 阅读 · 0 评论 -
(JS)迭代器模式
(JS)迭代器模式顺序访问一个集合使用者无需知道集合内部的结构class Iterator { constructor(container) { this.list = container.list; this.index = 0; } next() { if(this.hasNext()) { return this.list[this.index++]; } return null; } hasNext() { if(this.index>=this.原创 2020-07-26 13:50:38 · 125 阅读 · 0 评论 -
(JS)观察者模式
(JS)观察者模式一对多发布&订阅class Subject { constructor() { this.state = 0; this.observers = []; } getState() { return this.state; } setState(state) { this.state = state; this.notifyAllObservers(); } // 触发每一个Observer的update()方法 notifyAllO原创 2020-07-26 08:38:17 · 167 阅读 · 0 评论 -
(JS)代理人模式
(JS)代理人模式使用者无权访问目标对象通过代理人来控制和授权class ReadImg { constructor(fileName) { this.fileName = fileName; this.loadFromDisk(); } display() { console.log("disp"); } loadFromDisk() { console.log("Disk"); }}class ProxyImg { constructor(fileName) {原创 2020-07-26 08:22:49 · 139 阅读 · 0 评论 -
(JS)装饰器模式
(JS)装饰器模式为对象添加新功能不改变其原有的结构和功能class Demo { draw() { console.log("画一个") }}class Circle { constructor() { this.circle = new Demo(); } draw() { this.circle.draw(); this.dec(); } dec() { console.log("装饰") }}let dr = new Circle();原创 2020-07-25 18:43:37 · 162 阅读 · 0 评论 -
(JS)适配器模式
(JS)适配器模式使用一个方法去封装和调用不适配的方法class Adaptee { specificRequest() { return "English"; }}class Target { constructor() { this.newTarget = new Adaptee(); } request() { let info = this.newTarget.specificRequest(); return `${info}---转换为---Chinese`原创 2020-07-25 14:18:53 · 119 阅读 · 0 评论 -
(JS)单例模式
(JS)单例模式单例模式即只创建一个实例,如果多次调用,则返回第一次创建的实例在JS中没有私有变量和私有方法,所以可以使用闭包来代替class singleObject { login() { console.log("login..."); }}singleObject.getInstance = (function() { let instance; return function() { if(!instance) { instance = new singleObje原创 2020-07-25 13:42:21 · 146 阅读 · 0 评论