在面向对象程序(OOP)设计中,开放-封闭原则(OCP)是最重要的原则,一个oop的程序具有良好的设计,往往说明它是符合开放-封闭原则的.
参考《javascript模式设计与开发实践》第20章
首先看一个代码.开放封闭是相互关联的在一段代码中既要体现封闭又要体现开放。封闭不破坏旧功能,开放有可以添加新功能。
//下面这个函数是修饰模式,在函数运行后添加功能
//通过这个函数,添加的功能不影响原函数的功能
Function.prototype.after = function( afterfn ){
var __self = this;
return function(){
var ret = __self.apply( this, arguments );
afterfn.apply( this, arguments );
return ret;
}
};
//如果多人开发,都要在window.onload下挂载函数功能(原生的js代码
//只能加载一次window.load函数)。很有可能别人也在使用.
//要解决这个问题可以结合after函数和函数引用赋值来解决这个问题
//如果windoW.load已经挂载有内容,就引用赋值,然后使用after
//如果没有使用则直接引用空函数对象,然后挂载after函数
//无论哪种情况,通过after函数的
window.onload = ( window.onload || function(){} ).after(function(){
console.log( document.getElementsByTagName( '*' ).length );
});
但是在实际应用中使用开放-封闭原则很困难,关键是要找到程序在哪里发生变化,这不是一朝一夕之功。所以道理很简单,但是应用起来可能很困难。长路漫漫啊。
至此本人基本把javascript的模式设计的内容过了一遍。可以说收获良多,学到很多东西。阅读代码和分析代码的能力有了提高,好像是在NBA的赛场上,通过解说员的一些战术分析,慢慢看明白了一些跑位和战术,对于一个球迷来说在这种情况下看比赛就不光光是看热闹了,比赛有了更深层次的意义,此时的心情就是有想看更多比赛来验证下一场比赛是否也会出现同样的战术。
但这也只是一个起点而已,过一年肯能会觉得现在写的这些文章很幼稚很傻比。就拿这些学习笔记记录这个傻逼的过程吧.
NBA常规赛结束了,还有季后赛和下一赛季等着呢。