课程名称:Java设计模式精讲 Debug方式+内存分析
课程章节:第3章 软件设计七大原则
主讲老师:Geely
课程内容:
合成(组合)/聚合复用原则
问题1)定义
尽量使用对象组合/聚合,而不是继承关系达到复用的目的。
问题2)聚合和组合?
聚合 has-a :部分可以独立存在。
组合 contains –a :部分不可以独立存在,部分不存在,整体就不存在。
问题3)组合/聚合和继承的关系?
组合聚合:
优点:黑箱复用(a类包含b类,对于b类是看不见的。)
降低类与类之间的耦合,一个类的变化对其他类造成的影响相对较小。
缺点:对象多。
继承:
优点:白箱复用,修改,扩展性比较好
缺点:破坏包装(因为父类的将实现细节暴露给子类。)
问题4)什么时候使用组合/聚合,继承呢?
继承是 is-a :有很好的扩展性。
比如:所有的员工都继承员工类。继承角色类,
设计模式的三个分类
创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程。
结构型模式:把类或对象结合在一起形成一个更大的结构。
行为型模式:类和对象如何交互,及划分责任和算法。
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性,程序的重用性。可以理解为:“世上本来没有设计模式,用的人多了,便总结出了一套设计模式。”
面向对象的设计模式有七大基本原则:
- 开闭原则(Open Closed Principle,OCP)
- 单一职责原则(Single Responsibility Principle, SRP)
- 里氏代换原则(Liskov Substitution Principle,LSP)
- 依赖倒转原则(Dependency Inversion Principle,DIP)
- 接口隔离原则(Interface Segregation Principle,ISP)
- 合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)
- 最少知识原则(Least Knowledge Principle,LKP)或者迪米特法则(Law of Demeter,LOD)
简单理解就是:开闭原则是总纲,它指导我们要对扩展开放,对修改关闭;单一职责原则指导我们实现类要职责单一;里氏替换原则指导我们不要破坏继承体系;依赖倒置原则指导我们要面向接口编程;接口隔离原则指导我们在设计接口的时候要精简单一;迪米特法则指导我们要降低耦合。
设计模式就是通过这七个原则,来指导我们如何做一个好的设计。但是设计模式不是一套“奇技淫巧”,它是一套方法论,一种高内聚、低耦合的设计思想。我们可以在此基础上自由的发挥,甚至设计出自己的一套设计模式。
当然,学习设计模式或者是在工程中实践设计模式,必须深入到某一个特定的业务场景中去,再结合对业务场景的理解和领域模型的建立,才能体会到设计模式思想的精髓。如果脱离具体的业务逻辑去学习或者使用设计模式,那是极其空洞的。接下来我们将通过外卖营销业务的实践,来探讨如何用设计模式来实现可重用、易维护的代码。