随笔分类 - 设计模式
摘要:中介者模式 如图,左边的这种相互的沟通会非常出杂乱,复杂。严重不符合开放封闭原则,其中一个对象改了,就牵扯到很多的对象。右边的,如果一个对象改了,只要改中介者就行 举个例子:比如买房子,a,b分别是买房子和卖房子的两个人 // 中介者 class Mediator { constructor(a,
阅读全文
摘要:备忘录模式:随时记录一个对象的状态变化,随时可以恢复之前的某个状态(如撤销功能) // 状态备忘 class Memento { constructor(content) { this.content = content; } getContent() { return this.content;
阅读全文
摘要:命令模式:执行命令时,发布者和执行者分开(比如老板和服务员,老板说谁谁谁去干什么,然后服务员就去干了,这适合人比较少,一吆喝就都知道了。如果是上千人,这样就不合适了,这个时候需要发布者和执行者分开)。中间加入命令对象,作为中转站。 比如战争片中,将军传递命令 class Receiver { exe
阅读全文
摘要:class Action { handle() { handle1(); handle2(); handle3(); } handle1() { console.log('1'); } handle2() { console.log('2'); } handle3() { console.log('
阅读全文
摘要:策略模式:不同策略分开处理,避免出现大量 if...else 或者 switch...case class User { constructor(type) { this.type = type; } buy() { if (this.type 'ordinary') { console.log('
阅读全文
摘要:状态模式:一个对象有状态变化,每次状态变化都会触发一个逻辑,不能总是用if...else来控制 比如红绿灯 uml类图 代码 // 状态(红灯,绿灯 黄灯) class State { constructor(color) { this.color = color; } // 设置状态 handle
阅读全文
摘要:迭代器模式:顺序访问一个集合(顺序访问就要求是有序的)。使用者无需知道集合的内部结构(封装) <body> <div id="div1"> <p>jquery each</p> <p>jquery each</p> <p>jquery each</p> </div> <script> var arr
阅读全文
摘要:装饰器模式:为对象添加新功能,不改变其原有的结构和功能 适配器模式是原有的不能用了,要重新封装接口。装饰器模式是原有的还能用,但是需要新增一些东西来完善这个功能 比如手机壳,手机本身的功能不受影响,手机壳就是手机的装饰器模式 uml类图 代码 class Circle { draw() { cons
阅读全文
摘要:适配器模式:旧接口格式和使用者不兼容,中间加一个适配转换接口 比如国外的插座跟国内的插座不一样,我们需要买个转换器去兼容。 uml类图 代码 class Adaptee { specificRequest() { return '德国标准的插头'; } } class Target { constr
阅读全文
摘要:将new操作单独封装,遇到new时,就要考虑是否该用工厂模式 示例 你去购买汉堡,直接点餐,取餐,没必要自己亲手做(这就是一个初始化实例的封装) 商店要‘封装’做汉堡的工作,做好直接给买者 class Product { constructor(name) { this.name = name; }
阅读全文
摘要:第二题 某停车场,分三层,每层100车位 每个车位都能监控到车辆的驶入和离开 车辆进入前,显示每层的空余车辆数量 车辆进入时,摄像头可识别车牌号和时间 车辆出来时,出口显示器显示车牌号和停车时长 题目:画出UML类图 第二题 某停车场,分三层,每层100车位 每个车位都能监控到车辆的驶入和离开 车辆
阅读全文