1. 找出应用可能会变化的部分,把他们独立出来,不要和不变化的部分混合在一起。把变化封装起来,而不影响其他代码。
    2. 针对接口编程,而不是针对实现编程
    3. 多用组合,少用继承
    4. 类应该对扩展开放,对修改关闭
    5. 依赖倒置原则,要依赖抽象/接口,而不是依赖具体的类
    6. 一个类应该只有一个引起变化的原因