1.找出应用中可能需要变化之处,把他们独立出来,不要和那些不不要变化的代码混在一起。
把会变化的部分取出并“封装”,好让其他部分不会受到影响。
2.针对接口编程,而不是针对实现编程。
一些具体的实现被放到分开的类中,此类专门提供某行为接口的实现。
3.多用组合,少用继承。
4.类应该对扩展开放,对修改关闭。