随笔分类 - 设计模式
编程不仅仅是一门技术,也是一门艺术。设计模式归根结底就是为了提高代码的可复用性,可维护性,可扩展性和灵活性
摘要:一、编程设计原则 1)单一职责原则(SRP): 这里的职责是指“引起变化的原因”;单一职责原则体现为:一个对象(方法)只做一件事。 事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原因违反SRP的情况并不少见,比如jQuery中的attr方法,既负责赋值,又负责取值。这对于jQue
阅读全文
摘要:一、状态模式的定义 状态模式的关键是区分事务内部和外部的状态,事务内部状态改变往往会带来事务的行为改变。 状态模式中有意思的一点是,一般我们谈到封装,都是优先封装对象的行为,而非对象的状态。但在状态模式中刚好相反,状态模式的关键是把事务的每种状态都封装为单独的类,跟此种状态有关的行为都封装在这个类的
阅读全文
摘要:一、装饰者模式定义 装饰者模式可以动态地给某个对象添加一些额外的职责,而不会影响从这个类中派生的其他对象。这种为对象动态添加职责的方式就称为装饰者模式。装饰者对象和它所装饰的对象拥有一致的接口,对于用户来说是透明的。 和java等语言不同的是,java的装饰器模式是给对象动态添加职责,javascr
阅读全文
摘要:一、中介者模式的定义和应用场景 中介者模式的作用在于解除对象之间的紧耦合关系,增加一个中介者之后,所有对象都通过中介者来通信,而不是互相引用,当一个对象发生变化的时候,仅需要通知中介者即可。从而将网状的多对多关系转换为了简单的一对多关系。 中介者模式使得各个对象之间得以解耦,以中介者和对象之间一对多
阅读全文
摘要:一、职责链的定义和使用场景 职责链模式的定义是,职责链模式将一系列可能会处理请求的对象连接成一条链,请求在这些对象之间一次传递,直到遇到一个可以处理它的对象。从而避免请求的发送者和接收者之间的耦合关系。 职责链模式的优点是:请求发送者只需要直到链中的第一个节点,从而解耦了发送者和一组接收者之间的强联
阅读全文
摘要:一、享元模式的定义及使用场景 享元模式是为了解决性能问题而诞生的设计模式,这和大部分设计模式为了提高程序复用性的原因不太一样,如果系统中因为创建了大量类似对象而导致内存占用过高,享元模式就非常有用了。 享元模式的关键是区分内部状态和外部状态,剥离了外部状态的对象成为共享对象。有多少种内部状态的组合,
阅读全文
摘要:一、组合模式定义及使用场景 组合模式将对象组合成树形结构,用以表示“部分—整体”的层次结构,除了用来表示树形结构之外,组合模式还可以利用对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性。 实现组合模式的关键: 在java等静态语言中,需要单个对象和组合对象都实现同样的抽象接口,对外提供
阅读全文
摘要:一、命令模式使用场景及定义 命令模式常见的使用场景是:有时候需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道请求的具体操作是什么。此时希望用一种松耦合的方式来设计程序,使得请求的发送者和请求接受者可以解除彼此之间的耦合关系。 命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的
阅读全文
摘要:一、发布订阅模式定义 jQuery中的callbacks,defered,promise本质上就是发布订阅模式的实现。ES6的promise内部实现未开源,不了解具体机制 发布订阅模式又叫做观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
阅读全文
摘要:一、迭代器模式定义 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,并且不需要暴露该对象的内部表示。 在当前大部分语言中,都已经内置了迭代器模式。迭代器有内部迭代器和外部迭代器之分,一般现有语言中实现的大多是内部迭代器。 二、jquery中的each实现 对于数组采用数字下标访问,防止原型链
阅读全文
摘要:一、代理模式定义 代理模式的关键是:当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问。代理模式需要和本体对外提供相同的接口,对用户来说是透明的。代理模式的种类有很多,诸如防火墙代理,保护代理(帮助过滤掉一些请求,控制不同权限的对象对目标对象的访问),虚拟代理(
阅读全文
摘要:一、策略模式定义: 定义一些列的算法/规则,将它们封装起来,使得它们可以互相替换/组合使用。其目的在于将算法/规则封装起来,将算法/规则的使用与实现分离出来。 通过策略模式,可以减少算法计算过程中大量的if-else分支,并提高复用性。 一个策略模式的程序至少由两部分组成,一个是一组策略类,策略类封
阅读全文
摘要:单例模式的定义:确保一个实例,并提供全局访问。 惰性单例的定义:只在需要的时候才创建对象。 在开发中,有些对象往往只需要一个,比如线程池、全局缓存、浏览器中的window对象等。 java中的单例 关键在于使用一个变量来标志当前是否为某个类创建过对象。 这样的单例类有一定的“不透明性”,其使用者必须
阅读全文
摘要:建议结合自己另外一篇关于闭包的文章一起阅读:http://www.cnblogs.com/bobodeboke/p/6127650.html 一、闭包 闭包某种程度上就是函数的内部函数,可以引用外部函数的局部变量。当外部函数退出后,如果内部函数依旧能被访问到,那么内部函数所引用的外部函数的局部变量就
阅读全文
摘要:一、this指向问题 1)默认绑定,即作为独立的普通函数调用 此时this指向全局对象window,如果是严格模式下,则指向undefined; 2)隐式绑定,即具有调用上下文(一种场景就是作为对象的属性调用) 隐式绑定会将this绑定到这个上下文对象,如obj.getA();this就指向.之前的
阅读全文
摘要:所谓单一职责原则:就一个类而言,仅仅只有一个引起他变化的原因。开-闭原则:对程序改动是通过增加新代码进行的,而不是更改现有的代码。将程序中呈现出频繁变化的部分进行抽象。依赖倒转原则:A,抽象不应该依赖于细节,细节应该依赖于抽象。就是要针对接口编程,不要针对实现编程。 B,高层模块不应该依赖低层模块,两者都应该依赖于抽象。里氏代换原则:子类型必须能够替换掉他们的父类型。或者说高层模块和低层模块之间通过接口或者抽象类对接,谁也不需要依靠谁,除了约定的接口,大家都可以灵活自如。如果程序中所有的依赖关系都是终止与抽象类或者接口,就是面向对象的设计,反之就是过程化的设计了。
阅读全文