单一职责
一个类尽量只负责一个功能,比如说上传图片文件,涉及到图片的选择,文件上传前的一系列操作(压缩图片,旋转图片等),文件上传等,此时压缩图片相关的操作应该尽量写一个类里,这样可以提高复用,减小耦合。
开闭原则
对于新的功能或者是修改,要尽量不去修改原来的代码,通过继承或者抽象的方式,去实现新功能或者是修改原有的逻辑,比如很常见的if-else语句(策略模式),如果不用策略模式,每次添加一个新的分支,就得修改原有的if-else逻辑,并且增加新的功能,很容易出错(修改的越多,错的概率越大)。采用策略模式,可以只关注自己当前的判断条件下的实现,唯一的坏处就是类增长,相当于用空间换效率,个人认为还是很值得的。
里氏替换
一个类或方法所依赖的对象,继承自同一个接口(注意这个接口的实现结果不能更改,例如输入1输出是2,不管具体的对象怎么实现,输入输出得保持一致),这样就会有很大的灵活性。例如现在有一组数据,我们需要通过一个筛选,然后返回筛选后的数据。直接编写的话,后期如果需要改筛选逻辑,就得修改原有的代码逻辑。通过依赖倒置,我们定义一个interface类customAlgorithm,在筛选数据的时候传入customAlgorithm对象,实现筛选,后续如果我们需要修改筛选逻辑,就直接修改传入的对象即可,数据筛选依赖于customAlgorithm接口,下层调用需要实现customAlgorithm。在kotlin中,_Collections.kt中的filter就是基于这个原则。
依赖倒置
在java语言,代表的是两个类之间的联系通过抽象类或者是接口实现,最大的好处就是解耦,同时提高了扩展性,也使得代码更加健壮。比如,小明住在河边,想要喝水的时候就走到河边喝水,这样就会很累,此时如果在小明的家里和河边接入一条水管,那么小明再想喝水就只需要打开水龙头就可以。这里的水管就是对于取水的接口具体的接口实现。
接口隔离
一个类不需要依赖它用不到的类,意思就是只依赖用的到的类。
迪米特原则
模块之间只依赖需要的类,需要依赖的类最好是依赖接口,就是说只依赖引用到的,具体的实现调用方不需要知道,调用方只需要给出输入,然后拿到输出。