一 什么是设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
二 设计原则
要学会设计模式,首先要了解设计模式所依托的设计原则:
(1)单一职责原则(SRP原则):一个对象(方法)只做一件事情。
运用的设计模式:代理模式,单例模式,装饰者模式等。
(2)最少知识原则(LKP原则):一个软件实体应当尽可能少地与其他实体发生相互作用。软件实体是一个广义的概念,不仅包括对象,还包括系统,类,模块,函数,变量等。
最少知识原则要求我们在设计程序时,应当尽量减少对象之间的交互,一个对象应尽可能少的了解其他对象。
运用的设计模式:中介者模式,外观模式等
(3)开闭原则(开放-封闭原则/OCP原则):软件实体(类,模块,函数)等应该是可以扩展的,但是不可修改。
运用的设计模式:发布-订阅模式,模板方法模式,策略模式,代理模式,职责链模式等。
(4)里氏转换原则:子类继承父类,单独掉完全可以
(5)依赖倒转原则:引用一个对象,如果它有底层对象,直接调用底层。
(6)合成/聚合复用原则:新的对象应尽可能使用一些已有的对象,使之成为新对象的一部分
(7) 接口隔离原则。不应该强迫客户依赖没有使用的接口。有个问题是,JS中没有显式的接口,不过我们有方法绕过。
SOLID设计原则请参考: http://www.infoq.com/cn/news/2014/01/solid-principles-javascript
三 常用设计模式
(1)单体(Singleton)模式(单例模式): 绝对是JavaScript中最基本最有用的模式。
单例概念:保证一个类只有一个实例
实现的方法:先判断实例存在与否,存在直接返回,不存在就创建了再返回,这确保一个类只有一个实例对象。
用途:
a.用来划分命名空间,从全局命名空间里提供一个唯一的访问点来访问该对象。
b.实现模块内部保护,模块之间通信
优点:可以减少网页中全局变量的数量(在网页中使用全局变量有风险);可以在多人开发时避免代码的冲突(使用合理的命名空间)等。
使用注意事项:
a.this的使用
b.闭包容易造成内存泄漏,不需要赶快处理掉
c.注意new的成本(继承)
实例:
<script>
//top模块(与下面的banner模块是独立的命名空间,互不干扰(自己保护自己),相互可以通信)
var top = {
init: function () {
//先绑定dom元素
this.render();
//再为dom元素绑定事件
this.bind();
},
a: 4, //想传递的量
//render 把所有的dom元素放在这里边
render: function () {
var me = this;
me.btn_a = $('#a');
},
//bind 给元素绑定事件
bind: function(){