1. 封装变化
找出应用中经常需要变化的地方,把它独立出来,不需要把它和那些相对稳定的代码混在一起
2. 面向接口而非实现
我们应该面向抽象的接口功能编程,而不应该面向实现细节编程
3. 多用组合,少用继承
组合相对于继承更加具有弹性,面向新的功能,有时继承必须要修改原有代码,但是组合却可以在不改变原有代码的基础上添加新功能,
缺点待定
4. 对象之间松耦合
两个对象之间可以相互交互,但不知道彼此内部的细节
对象之间依赖减少,有利于灵活地修改代码
5. 开放关闭原则
面向修改关闭,面向添加开放