2

最少知识原则的终极目标的是实现完全傻瓜式的程序。 举个例子吧, 就比如 美图神器, 你上传一张凤姐的照片后,你可以选择 自然磨皮,高度磨皮 -> 瘦脸,瘦腿模式 -> 美瞳-> 手动丰胸等等。 当然, 你也可以直接使用一键美化,瞬间angelababy. 你完全不用关心,这些软件是怎样实现这些功能的,让你变美变美变的更美就够了。 而且,更人性化的是,他提供了一键美化的功能,更让你瞬间美美哒。
好吧,回到现实。
我们在程序中,把这个行为就叫做最少知识原则。他的要求就和上面一样,你的程序暴露的接口要是最傻瓜式的,否则你就是反人性!!!
我们来具体说一下实现吧。

减少对像间的耦合性

说几个应用场景吧
看个图

这是我们现在对象间的关系,如果你的leader要你去实现这个业务,我觉得,我宁愿辞!职!
所以,这种反人性的事情,我们是不会做的。 我们一般会,自己动手改一下。

哈哈哈!!! 要知道 一维的难度 << 二维的难度.
看见这样的实现,心里也放心多了。 这个其实就是中介者模式,里面使用了最少知识原则, 本来对象间的联系可谓是 超!级!复!杂!。 但经过重构和优化之后,瞬间降低了一个量级。
关于一些具体实例,大家可以参考一下 前面的 中介者模式 里面所介绍的。
我们如何做到解除对象间的耦合性主要手段还是很多的。 比如学习中介者模式,在对象间创建一个中介者来管理一切。 而其中使用的手段就是封装和隐藏。
封装在程序中起到的作用就是,封装内部数据,封装操作,然后暴露一个最直接的接口。
同样,再拿单例模式来说一说。

var single = (function(){
    var result;
    return function(obj){
        return result||(result=obj);
    }
})();

将保存结果的变量放到闭包里面,完美的包装了数据,既不会污染全局,而且也十分方便调用。

最少知识原则的实现

其实,最少知识原则和单一原则所达到目的是相似的,一个是,让你的程序对外尽量简单,一个是让你的程序里的对象,相互联系尽量简单。 关于如果实现的话,其实,就是封装参数,封装函数等这一类的手段,而这些在模式介绍中已经阐述的很清楚了,这里就不做过多的讲解。 如果有兴趣可以看看前面 的 中介者模式,代理模式,策略模式等。


villainhr
7.8k 声望2.2k 粉丝