面向对象设计原则总结

面向对象特性

  • 抽象
  • 封装
  • 继承
  • 多态

面向对象设计原则

一般设计原则

摘自《Head First 设计模式》

  • 封装变化
  • 多用组合,少用继承:has-a 比 is-a 更灵活,可运行时改变行为/属性
  • 针对接口编程,不针对实现编程:变量声明为超类型(接口/抽象类)
  • 为交互对象之间的松耦合设计而努力(想想观察者模式如何将主题和观察者之间解耦)
  • 类应该对扩展开放,对修改关闭
  • 依赖抽象,不要依赖具体类(依赖倒置)
  • 只和朋友交谈
  • 别找我,我会找你:超类调用决定何时子类
  • 类应该只有一个改变的理由

如何理解依赖? #include "Pizza.h"?

SOLID 原则

  • S-单一职责
  • O-开放关闭:对扩展开放,对修改关闭。扩展新功能不需要修改现有代码
  • L-李氏替代:需要父类对象的地方可以用任何子类对象替代
  • I-接口分离
  • D-依赖倒置
    Denpendency Inversion Principle,常见于工厂方法。
    强调“抽象”,不能让高层组件依赖低层组件。例如:不论是高层组件 PizzaStore(PizzaStore 行为由抽象 Pizza 定义)还是低层组件 ConcretePizza(实现了 Pizza 抽象接口)都依赖于 Pizza 接口。

依赖倒置指导方针

  • 变量不可以持有具体类的引用——改用工厂,避免直接使用 new 持有具体类的引用
  • 不要让类派生自具体类——派生自抽象类或接口,这样就不依赖具体类了
  • 不要覆盖基类中已经实现的方法——说明不是一个真正适合被继承的抽象

DRY 原则

Don't Repeat Yourself 不要重复

KISS 原则

Keep It Simple and Stupid 保持简单

上一篇:CF979A Pizza, Pizza, Pizza!!! 题解


下一篇:java常见设计模式