1、可变与不变分离。

2、针对接口而非实现编程。

3、多用组合,少用继承。(策略模式)

4、高内聚、低耦合。(观察者模式)

5、可扩展不可修改。(装饰者模式)

6、依赖抽象而非具体类。(工厂模式)

7、交互尽量少。

8、交互是有向性的。

9、一个类只做一件事。