面向对象设计模式学习---正真的OOPL
一直以来都是从编程语言方面去理解面向对象,本以为熟悉了封装、继承、多态就理解了面向对象编程的思想。其实这是很狭隘的想法,软件的建立并不是采用了面向对象语言编写的程序,并采用了一些面向对象特性的东西就算是一个真正面向对象构建的软件了。还需要采用面向对象的设计模式来设计软件才算得上是真正意义上的彻底掌握面向对象的思想。
申明:设计模式包含了多种软件设计的模式,在这里讨论的暂时为面向对象的设计模式,之后简称“设计模式”
设计模式是为了“应对变化,提高复用”。设计模式并不是一种技巧,不可以可以照搬套用。举个在之前公司的模式失败例子,在公司系统期初架设阶段决定用三层模式开发,然而因为并没有真正理解何为三层模式,就照搬套用,为三层建立各自的新项目。然而在开发过程中,由于对模式并不真正了解,以至于代码编写及其不规范,更无层次感可言,到最后其中的一层简直是冗余代码。可见,真正理解了设计模式,并在软件设计中选取合适的模式才是设计模式得以起到正面效果,反之必将为其所伤为其所困。
有鉴于此,本人希望在此发布对设计模式的学习理解,希望网络牛人可以相互帮忙指正我理解方面的错误之处。
设计原则
- 针对接口编程,而不是针对实现编程
客户程序无需知道对象的具体类型,只需知道该接口有所需要的接口
- 优先使用对象组合,而不是类继承
继承在某种程度上破环了封装性,子父类之间耦合度高,而对象组合只要求被组合的对象有良好定义的接口,耦合度低
- 封装变化点
抽象对象之间的分界层,让程序的变化侧重于在对象的一侧修改,另一侧则不受影响,实现层次之间的松耦合
- 使用重构得到模式
设计模式不宜先入为主,照搬套用,没有一步到位的设计模式
原则细化
- 单一职责原则:一个类仅有一个引起它变化的原因
- 开放封闭原则:类模块可以扩展,但不可以修改
- Liskov原则:子类必须能够替代他们的基类
- 依赖倒置原则:高层模块不应该依赖于底层模块,二者都依赖与抽象。实现细节也依赖于抽象
- 接口隔离原则:不强迫客户程序依赖不需要的方法