随笔分类 - 设计模式-javascript实现
摘要:1. 单一职责原则(SRP原则) 单一职责原则的职责被定义为“引起变化的原因”。如果我们有两个动机去改写一个方法,那么这个方法就具有 两个职责。每个职责都是变化的一个轴线,如果一个方法承担了过多的职责,那么在需求变迁过程中,需要改 写这个方法的可能性就越大。 因此,SRP原则体现为:一个对象(方法)
阅读全文
摘要:定义: 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 1. 代理模式的实现 const Flower = function(){}; const xiaoming = { sendFlower: function(target){ const flower = new Flowe
阅读全文
摘要:定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成 一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 ###1. 实现职责链 // 定义职责链 class Chain { constructor(fn){ this.fn = fn; this.su
阅读全文
摘要:定义:享元模式是一种用于性能优化的模式,其核心是运用共享技术来有效支持大量细粒度的对象。享元模式 要求将对象的属性划分为内部状态与外部状态(通常指属性),其目标是尽量减少共享对象的数量。 内部状态和外部状态: 内部状态存储于对象内部 内部状态可以被一些对象共享 内部状态独立于具体的场景,通常不会改变
阅读全文
摘要:定义:组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。除了用来表示树形结构之外,组合 模式的另一个好处是通过对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性。 1. 实现组合模式 class Folder { constructor(name, parent){ this
阅读全文
摘要:定义:命令模式中的命令指的是一个执行某些特定事情的指令,命令模式的应用场景是,有些时候需要向某些 对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么。此时希望用一种松耦合的 方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间的耦合关系。 1. 用类的方式实现命令模式 //
阅读全文
摘要:定义:适配器模式主要用来解决两个已有接口之间不匹配的问题,它不考虑这些接口是怎样实现的,也不考虑它们将来 可能会如何演化。适配器模式不需要改变已有的接口,就能够使它们协同作用。 1.适配器模式的实现 通过adapter类包装为统一的接口 class GooleMap { show(){ consol
阅读全文
摘要:定义:中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,所有的相关对象都 通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知中介者对象即可。中介者 使各个对象之间耦合松散,而且可以独立地改变它们之间的交互。中介者模式使网状的多对多关系变成了相对 简单的
阅读全文
摘要:定义:外观模式又叫门面模式,外观模式为一个系统中的子系统提供一个统一的高层接口,从而方便使用 子系统。 1. 用类实现外观模式 class Cpu { install() { console.log('install cpu'); } } class Disk { install() { conso
阅读全文
摘要:定义:给对象动态地增加职责的方式称为装饰者模式,装饰者模式能够在不改变对象自身的基础上,在程序运行 期间给对象动态地添加职责。 从功能上而言,装饰器能很好地描述这个模式,但从结构上看,包装器的说法更加贴切。装饰者模式将一个对象 嵌入另一个对象之中,实际上相当于这个对象被另一个对象包装起来,形成一条包
阅读全文
摘要:发布-订阅模式也叫观察者模式,可以用在异步编程中替代回调函数的方案。发布-订阅模式可以取代对象之间硬 编码的通知机制,一个对象不用显式地调用另一个对象的某个接口。发布-订阅模式让两个对象松耦合地联系在 一起,虽然不太清除彼此的细节,但这不影响它们之间相互通信。 1. 发布-订阅模式的实现思路 指定发
阅读全文
摘要:定义:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 其主要原理是将状态封装成独立的类,并将请求委托给当前的状态对象,当对象内部状态变化时, 会带来不同的行为变化。 1. 状态模式类实现方式 // 状态类 class OffLightState { constructor(
阅读全文
摘要:定义:迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也 可以顺序访问其中的每个元素。 1. 内部迭代器 内部迭代器在调用的时候非常方便,外界不用关心迭代器的
阅读全文
摘要:定义: 定义一系列的算法,把它们一个个封装起来,并且使他们可以相互替换。 实现方案一:将算法集中在对象中进行管理,利用对象的key值选取需要的算法 // 定义策略对象的一系列算法 const strategies = { "S": salary => salary * 4, "A": salary
阅读全文
摘要:定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 1. 用传统类的方式实现单例模式 Singleton 提供访问单例对象的统一接口:getInstance() class Singleton { constructor(){ this.instance = null; } static
阅读全文