单一职责,也就是指某个类,或函数,或对象只做一件事情。如果某个模块涉及的职责越多,那么它被修改的几率越大,你在修改某个功能时可能会影响其它代码,造成不必要的 bug。
单一职责原则在很多设计模式中都有着广泛的运用,代理模式,迭代器模式,单例模式和封装模式,这些模式在前几个文章都有单独写过,就不在详细说明,感兴趣的可以去看一下。
首先我们要明确,不是所有的职责都应该一 一分离,所以单一职责原则是最简单也是最难应用的原则。一方面,如果随着需求的变化,两个职责总是同时变化那就不变分离他们。另一方面即使两个职责已经被耦合在一起,但他们还没有改变的征兆,那么也没必要主动分离他们,在代码需要重构时在进行分离也不迟。
优点:降低了单个类或对象的复杂度,有利于代码复用,也有利于进行单元测试,当一个职责变更时不会影响其他职责。
缺点:明显增加代码编写的复杂度,按职责划分为更小粒度之后,也恰恰增大了这些对象联系的难度。
最少知识原则说的是完成一个功能,应该用最少的对象或类或函数参与其中。
在程序设计时,应当尽量减少对象之间的交互,如果两个对象不必彼此直接通信,那么这两个对象就不要发生直接相互联系。常见的做法时引入第三方来承担这些对象的通信作用。如果一些对象需要向另一些对象发起请求,可以通过第三者对象来转发这些请求。
最少知识原则所运用的设计模式是中介者模式和外观模式。中介者模式在前边文章中有详细介绍。
封装表达的是对数据的隐藏,将其中的变量或实现细节隐藏,只暴露一个与外界访问的接口API。
在面向对象的程序设计中,开放封闭原则是最重要的一条原则,也就是说一个模块是可以扩展的,但是不可以修改。
应用最广泛的便是装饰者模式,在不更改原函数的情况下,来为一个函数添加一个新的功能。
思想:当需要改变一个程序的功能或者给这个程序增加新的功能时,可以使用增加代码的方式,但是不允许改动程序的源代码。
过多的条件分支是造成程序违反开放封闭原则的一个原因。每次增加一个新的分支,便会对原代码进行修改。所以我们要考虑是否可以用对象的多态性重构他们。
找出程序中将要发生变化的地方,然后把变化封装起来。把系统中稳定不变的部分和容易变化的部分隔离开来。
几乎所有的设计模式都遵循开放封闭原则,开放封闭原则是编写一个好程序的目标,其他设计原则都是达到这个目标的过程。
1. 发布订阅模式:降低对象之间的依赖关系
2.模板方法模式:通过封装变化来提高系统扩展性
3. 策略模式:策略和使用策略的客户代码分别独立进行修改而互不影响
4. 代理模式:专注于设计自己的职责,让代理来增加其他机制
5. 职责链模式:修改任意一个节点对其他节点都没有影响
如果条件分支语句中散步了一些重复的代码,那么就需要进行合并。
将条件分支的判断语句封装到一个单独的函数中。
在合适的地方使用 return 提前结束分支判断。
如果链条结构相对稳定,后期不易发生修改,那么就可以使用链式调用。
设计模式和设计原则是为我们做大型项目时提供方便,当你面对很多无理的需求时,你就能深刻感受到它给我们带来的好处。可能自己写一些小的项目时觉得没有必要,有时候确实如此。但是我们要把设计模式和原则作为我们编程的习惯和思想,让我们可以写出诗一样的代码!