(1)、单一职责原则
引起类的变更或者模块变更原因应该有且仅有一个(There must be one reason for a class to change)翻译过来的原因就是说,一个方法或者对象只做一件事情,其逻辑肯定比一个负责多项功能的方法简单的多,降低各方法之间的耦合性,避免改动其中一个就影响到其他模块的概率,降低变更引起的风险。Animal这个类就做了一件事情,就是喵喵叫,当传进来的动物时候猫的时候,没有任何问题,但是如果传进来的是狗,就有问题了,按照单一职责原则,这个时候需要重新写个类。
function Anmimal(){
this.bark = function(animal){
console.log(animal+'喵喵叫');
}
}
var animal = new Anmimal();
animal.bark('猫');
animal.bark('狗');
function Anmimal1(){
this.bark = function(animal){
console.log(animal+'汪汪叫');
}
}
var animal = new Anmimal1();
animal.bark('狗');
(2)迪米特法则
也叫最少知道原则,一个对象应该对其他对象有尽可能少的了解。一个对象内可以按照单一职责原则拆分很多功能模块,但是只对外暴露统一的借口或者调用方法,无须调用者知道被调用者内部其他方法功能模块等。
function People(){
run = () =>{
console.log('run');
talk();
}
talk = () => {
console.log('talk');
}
return {
runAndTalk: run,
}
}
(3)依赖倒置原则
参考java里面的抽象类和借口,只负责定义基础方法但是不具体实现,具体实现交给子类去实现,如果你依赖的不是基础类,而是一个复杂的业务类,任何一项变更都将会导致一系列的变化,从而引发风险,维护成本也会增加。
(4)接口隔离原则
接口不能写的过于庞大和臃肿,尽可能的将拆分,将接口细化,个人理解类似一开始讲的单一职责原则,一个方法或者对象只负责一个功能,而不是一股脑的将所要功能写在一个方法里面,增加了耦合度。
(5)替换原则
子类要完全实现父类的方法,用父类地方可以完全用子类代替,子类可以扩展父类的功能,但是不能改变父类原有的功能,当功能扩展的时候,子类尽量不要去重写父类的方法,而是另写一个方法
(6)开闭原则
开闭原则其实讲的就是代码的可扩展性,当遇到需求变更时,我们只需要在原来的基础上调用方法扩展,而不是直接去修改原有代码逻辑,从而引发对原有逻辑的影响,例如Vue的mixin混入方法就是开闭原则的最好体现。