设计原则与编程技巧汇总

1,SRP【单一职责链原则】

单一职责链原则:按照职责把对象分解成更小的颗粒度,有助于代码的复用,亦有利于单元测试,缺点是增加编写代码的复杂度。

常用的有:

代理模式,通过代理把本体需要做的事情分离出来,互不影响;

迭代器模式,也是将职责分离,迭代器对象职责专门负责遍历对象,而分离出业务函数中的遍历;

单例模式,典型的单一职责链模式,将单利实现方式分离出来,其他业务方法只负责实现,而不用负责单例实现;

装饰者模式给,给对象动态增加职责,分离职责的一种方式。

2,LKP【最少知识原则 / 好莱坞原则 / 迪米特法则】

尽可能少的与实体发生交互,对象,类,系统,函数,变量等

单一职责原则是将对象划分成较小的颗粒度,提高对象的可复用性,但是对象间的耦合度高的话,会影响它的复用性,程序中的朋友太多并不是一件好事。类似的故事:“城门失火,殃及池鱼”,“一人犯法,株连九族”,就是说对象间的耦合度太高,那么会牵一发而动全身。

最少知识原则就是尽量减少对象间的交互,简单的来说,如果我需要和你通信,不会直接跟你通信,而通过一个第三方帮忙,其实就是好莱坞原则,“不要给我们打电话,我们会给你打电话don't call us,we'll call you”。

设计模式中的最少知识原则:中介者模式,外观模式

中介者模式,增加一个中介者,让其负责调度。

外观模式,最开始访问子系统时调度复杂,而外观模式为一组子系统提供了简单的访问入口,符合最少知识原则。

var A = function(){
a1();
a2();
}
var B = function(){
b1();
b2();
}
var facade = function(){
A();
B();
}
facade();

最少知识原则还体现在API的封装上,模块内部的实现对用户来说是透明的,只暴露必要的接口API供外界访问,优点是减少了对象间的依赖,但是也增加了一些庞大到难以维护的第三者对象。

3,OCP【开放-封闭原则】

软件实体(类,模块,函数等)应该是可以扩展的,但是不可修改的。这就符合开放-封闭原则。

改代码时候,很容易引起另外一个bug的发生,所以改动代码往往是一种危险的行为。

开放-封闭原则:当需要改变一个程序的功能或者给这个程序增加新功能时候,可以使用增加代码的方法,但是不允许改动程序的源代码。

加个类似的故事吧,跟肥皂有关的,很能体现开发-封闭原则:有一家生产肥皂的大企业,从欧洲花巨资引入了一条生产线。这条生产线可以自动完成从原材料加工到包装成箱的整个流程,但美中不足的是,生产出来的肥皂有一定的空盒几率。于是老板又从欧洲找来一支专家团队,花费数百万元改造这一生产线,终于解决了生产出空盒肥皂的问题。

另一家企业也引入了这条生产线,他们同样遇到了空盒肥皂的问题。但他们的解决办法很简单:用一个大风扇在生产线旁边吹,空盒肥皂就会被吹走。

可以看出:修改源码风险以及成本较大,而通过增加几行代码就能解决的问题,也更加优雅和简单。

多态思想也是一种开放-封闭原则体现【封装变化】。还有其他几种体现开发-封闭的体现还有,Hook【放置挂钩】,其实回调函数是一种特殊的挂钩,封装变化到回调函数里。

开放封闭原则是编写好程序的目标,设计模式中所有的原则都是为了达到这个目标。

有句古老的谚语说:“愚弄我一次,应该羞愧的是你。再次愚弄我,应该羞愧的是我。”这也是一种有效的对待软件设计的态度。为了防止软件背着不必要的复杂性,我们会允许自己被愚弄一次。

在最初编码时我们可能不会考虑到变化,当变化到来时,我们可以回过头来封装变化,确保不会掉进同一个坑。

 

 

 

【完】

新年flag7——每天晚上写笔记,尽可能是专业知识,或者心灵感悟,或者心经等,总之是要写东西的。

 

posted @ 2019-02-21 14:07  tangjiao_Miya  阅读(206)  评论(0编辑  收藏  举报