设计模式入门
为什么要使用设计模式
从计算机发明开始之日,程序的执行都是被顺序执行的(也就是面向过程编程),这就造成了合作开发、后期维护、代码质量等各个方面造成了困惑。所以前人开始设计出了面向对象编程的思维模式,并制造出一些基于面向对象编程的编程语言。
设计模式的基础是面向对象编程思想,也是前人使用面向对象思想构造系统的经验总结。指导我们如何组织类和对象来解决问题。
设计模式和面向对象的联系
- 设计模式是经历验证的面向对象设计经验。
- 设计模式可以让我们建造出具有良好面向对象设计质量的系统。
- 良好的面向对象设计模式具备的可复用性、可扩充性、可维护性这也同样是设计模式所具有的。
设计原则
- 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
- 针对接口编程,而不是针对实现编程。
- 多用组合,少用继承。
设计原则之抽离变化
我们在做一个系统时,后期维护是相当耗时的,抽离变化是一种减少维护难度的方法。开发过程中我们尽量的抽离以后可能会随时变化的部分,后期就可以轻易地修改或扩充。
但是有时有我们不是一开始就知道那一部分是会发生变化的,当新的需求逐步清晰,我们就要开始着手抽离变化,这个过程将一直陪伴我们的开发过程,这个原则也是指导很多设计模式的基础原则之一。
设计原则值面向接口编程
使用接口可以很容易的做到责任或行为隔离,还可以帮助我们实现抽离变化这一原则,不用把每个类的实现都绑死。
还可以更容易的把我们的视角放到调用者的角度,来判定该接口设计的职能够不够单一。
设计原则之多用组合,少用继承
继承的优点
- 子类可以通过继承父类来复用代码。
-
继承的缺点
继承的优点也恰恰是它的缺点,他把类和类之前的耦合变得更强了,如果抽离变化没有做好,会造成牵一发而动全身的效应。需求是一直变化的我们也不可能完美的抽离每一个变化。
- 违背了高内聚,低耦合的开发原则
那么组合又有什么优势,组合加接口可以很好的降低耦合。但是使用组合也意味着我们需要定义更多的接口和类,也无形中的增加了代码的复杂性和维护成本。
组合也不是完美的,我们开发中还是考量相关业务变动的概率,来选择使用继承还是组合,过渡设计是我们要避免的。