1. 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
2.针对接口编程,而不是针对实现编程。[“针对接口编程”实际上是指“针对超类型(supertype)编程”]
3.多用组合,少用继承。
4.设计是为了交互对象之间的松耦合。
-----摘自《Head First 设计模式》