单一职责原则
就一个类来说,应该仅有一个引起它变化的原因。在 JavaScript 中,单一职责原则更多地是被运用在对象或者方法级别上。
如果我们有两个动机去改写一 个方法,那么这个方法就具有两个职责。每个职责都是变化,需求的变迁过程中,需要改写这个方法的可能性就越大。此时,这个方法通常是一个不稳定的方法,修改代码总是一件危险的事情,特别是当两个职责耦合在一起的时候,一个职责发生变化可能会影响到其他职责的实现,造成意想不到的破坏, 这种耦合性得到的是低内聚和脆弱的设计。
SRP 原则体现为:一个对象(方法)只做一件事情。
1. 设计模式中的SRP原则
SRP 原则在很多设计模式中都有着广泛的运用,例如代理模式、迭代器模式、单例模式和装 饰者模式。这些模式我们会在以后进行详细的讲解。
1.1. 代理模式
我们使用图片预加载的例子。通过增加虚拟代理的方式,把预加载图
片的职责放到代理对象中,而本体仅仅负责往页面中添加 img 标签,这也是它最原始的职责。
myImage 负责往页面中添加 img 标签:
var myImage = (function(){
var imgNode = document.createElement( 'img' ); document.body.appendChild( imgNode );
return {
setSrc: function( src ){
imgNode.src = src;
}
}
})();
proxyImage 负责预加载图片,并在预加载完成之后把请求交给本体 myImage:
var proxyImage = (function () {
var img = new Image; img.onload = function () {
myImage.setSrc(this.src);
}
return {
setSrc: function (src) {
myImage.setSrc('file:// /C:/Users/svenzeng/Desktop/loading.gif');
img.src = src;
}
}
})();
proxyImage.setSrc('http:// imgcache.qq.com/music/photo/000GGDys0yA0Nk.jpg');
<