随笔分类 - 设计模式
摘要:发布订阅模式的思想是在观察者模式的基础上演变而来,在观察者模式中客户端监听到对象某个行为就触发对应任务程序。而在发布订阅模式中依然基于这个核心思想,所以有时候也会将两者认为是同一种设计模式。它们的不同之处在于观察者模式中的客户端与服务端是相互耦合的,即服务端对象直接绑定客户端的监听任务,客户端直接绑
阅读全文
摘要:观察者模式的思想就是对象的客户端保持实时的监听状态,当客户端监听到对象某个行为时触发相应的任务程序。 //服务的对象 let obj = { event:"aaa", fun:function(){ obj2.monitor(this.event); } } //客户对象 let obj2 = {
阅读全文
摘要:中介模式就是在对象与对象的客户端中间建立一个中介对象,这个中介对象不负责具体职责,只是将双方的程序消息传递给对方,具体任务依然由对象和对象的客户端完成。简单的模式模拟: //服务的对象 let obj = { data:"aaa", mas:function(){ return true; }, f
阅读全文
摘要:代理模式的思想就是在对象与对象的客户端之间建立一个新的对象,这个新的对象负责执行原对象的职责与客户端进行交互。这与之前的外观模式的区别是,外观模式将原对象包装起来,真正执行任务的依然是原对象的本身。 比如在浏览器的网络请求中就是一种代理模式,在浏览器中通过JS实现的网络请求最终会通过浏览器的内核中的
阅读全文
摘要:外观模式又被称为“过程模式”,为复杂的程序提供一种简洁的API,增强程序的可读性、功能内聚。这个模式并不关心程序内部的实现,主要关心对外提供简单的接口。 适应场景: 在程序的设计初期,应该有意识的将不同层分离,层与层之间建立外观模式。 开发阶段,子系统越来越复杂,增加外观模式提供简单的接口。 维护复
阅读全文
摘要:策略模式的思想是在程序运行时选择算法,这种情况非常普遍,在程序运行环境的不同程序需要选择不同的算法、在业务需求不同时需要选择不同的算法等。例如在表单验证时,需要做非空检查、字符检查等情况,这些不同的验证结果就需要不同的算法实现相应的功能; 还有工资计算时也会使用策略模式,比如针对不同的员工按照不同不
阅读全文
摘要:装饰模式的思想是可以在运行时动态的添加附加功能,即其预期行为可定制和可配置特点。并且在多个配置功能需要按照顺序进行时,都是装饰模式需要解决的问题。 按照这个思路首先我们需要一个描述执行任务的对象,这个对象上包含一系列的可定制和配置的功能,当这个任务执行时将运行中的需要附加的功能时添加到一个配置列表中
阅读全文
摘要:迭代模式的思想是必须有一个包含某种数据集合的容器,该数据集合可能存储在一个复杂数据结构内部,需要提供一种简单的能够访问数据结构中的每个元素。访问者并不需要了解数据容器中如何组织数据,所需要的就是取出单个数据进行工作。 基于这样的模式需求,首先需要一个容器,然后需要提供一个访问数据元素的接口,并且这个
阅读全文
摘要:工厂模式的目的是为了创建对象,对象创建重复操作比较频繁甚至需要批量创建;所创建的对象不确定具体类型,但所有对象一般具备公共特性又包含自身独有特性。 基于这样的模式需求,可以通过一个父类来创建包含所有公共特性的原型,然后通过子类创建具体的对象。 示例: //父类 function CarMaker()
阅读全文
摘要:单体模式的思想是在于保证一个特定的类仅有一个实例。也就是只要该构造函数创建过一次实例以后,再通过该构造函数重复创建实例时,得到的都是最初第一次创建的实例。 基于这样的思想可以想到的实现逻辑: 1.缓存第一次创建的实例; 2.并且缓存的实例不能发现变化。 基于这样的实现逻辑,缓存不能发生变化的解决思路
阅读全文
摘要:命名空间模式 声明依赖关系 私有化 模块模式 沙箱模式 静态成员 链模式 代码复用与继承 一、命名空间模式 1.1什么是命名空间模式?为什么要使用命名空间模式? 命名空间:用来组织和重用代码,区别不同代码之间的功能。简单的理解就是将不同功能的PIA名称按照指定结构和规律存储到一个列表中,并且所有AP
阅读全文
摘要:函数与API模式 函数与初识化模式 函数与性能模式 关于一等公民这一身份的由来主要是相对其他语言而言,在(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作为返回值,就需要
阅读全文
摘要:为什么说JavaScript一切都是对象? 字面量与构造函数从设计模式的角度如何抉择和处理可能引发的问题? 一、为什么说JavaScript一切都是对象? 1.1所有类型都有对应的对象模式 let str = "abc"; let strObj = new String("abc"); 1.2无论是
阅读全文
摘要:什么是可维护性? JavaScript如何实现可维护性代码? 一、什么是可维护性? 1.1什么是可维护性? 修改bug和新增迭代功能一个项目不可避免的基本操作需求,代码良好的阅读性、代码结构的一致性、预留未来迭代的空间、统一代码规范、充分必要的注释文档是可维护性的代码必须具备的特征。 为了保证实现的
阅读全文
摘要:关于设计模式与这一系列博客导读 基于《JavaScript模式》的学习路径与注意点 如何基于JavaScript设计关于解决特殊问题的模板 一、关于设计模式与这一系列博客导读 1.1什么是设计模式? 我在学习设计模式之前,听到或看到的最多的关于什么是设计模式的回答都是“....23种设计模式”,面对
阅读全文