单一原则就是只负责一个功能领域中的相应职责,你就干好自己的事,不能把别人的事也干了,比如说孙悟空会七十二变,如来会镇压孙悟空,不能孙悟空会镇压孙悟空,咋这自己把自己镇压的?这样会让别人觉得很奇怪,我以前在网上看过这样一篇文章,吐槽他接收的项目,项目中有一个“巨大”的类,万能方法集合类,就是把项目中用到的所有函数集合到一个类里面,哈哈!然后每次继续往下写的时候,就不知道自己将要写的方法函数,他上一位同事 是否实现过,有同学可能说,继续接着他的万能类往下写,没问题可以继续写,那样会造成大量的代码冗余和重复的工作量,甚至自己写的功能方法自己都找不到了,还有项目不迭代了是不,谁写谁难受,然后他就重构了他的万能方法类,进行抽象分类,经过不懈的努力,终于进行了代码重构。。一千多个方法怎么分。。。所以进行指责分类 利人利己
下面代码示例:
class Person{ constructor(){ this.name = name } eat(){ console.log(this.name + '正在吃饭') } } class Aircraft{ constructor(name){ this.name = name } fly(){ console.log(this.name + '正在起飞') } } new Person("小明").eat() //小明正在吃饭 new Aircraft("飞机").fly() //飞机正在起飞
如果我想让某个人执行吃饭的事件,我就会想到Person类下的eat方法能够实现我现在的需求,只要是涉及到人的行为,首先想到Person类而不会想到Aircraft类,这样能够让我们进行快速的代码实现, 这也是对指责能力的一个划分,让阅读者和自己能够快速找到详情的事件或功能。
耦合是指一种互相影响的关系,比如说A方法和B方法之间互相有关联,改变A ,B也会跟着改变,低耦合就是说尽量减少他们两个之间的关联
单一原则 最难的就是对职责的划分,让代码低耦合,有时候需要把一个职责,拆分成多个指责,来提高复用率,这时候就很容易发生耦合关系,我在网上看到一篇讲单一原则的文章,在这里和大家分享一下:
Better Mousetrap的工厂建造在Sidtown,而该工厂的员工都居住在Fredborough,所以每天早上大批员工从Fredborough出发前往Sidtown,并在傍晚返回;类似的,Zokko Soda公司的运输车在每天的工作时间都需要在制瓶工厂和灌装工厂穿梭来往,
很明显,如果Better Mousetrap的工厂和员工居住地都在同一城市,而Zokko Soda的两座工厂都建造在另一座城市,那么城市之间的交通状况将会明显改善。
他们两个互通的桥梁不再拥堵:体现出了低耦合。
自己内部就能完成需要的行为,不再依赖其他:体现了高内聚。
最后总结一下,单一原则是指 实现指责分类、模块与模块之间减少联系、模块自己就能完成需求