1.不要把程序中可能需要变化的部分和不需要变化的部分耦合在一起。
2.针对接口或者抽象类编程,而不是针对实现(接口可以有多个不同的实现,运行时选择正确的实现)。
3.多用组合,少用继承(组合比继承灵活性强很多很多)。