设计模式原则详解

设计模式遵循的基本原则

  1. 开闭原则OCP
  2. 里氏代换原则LSP
  3. 依赖倒转原则DIP
  4. 接口隔离原则ISP
  5. 合成/聚合复用原则CARP
  6. 迪米特法则LoD

1、开闭原则OCP:对扩展开放,对修改关闭

    解决问题的关键在于抽象化。在预见可能变化的前提下,给出一个一劳永逸、不再更改的抽象设计,此设计允许有无穷无尽的行为在实现层被实现。

    优点:

  1. 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,是变化中的软件系统有一定的适应性和灵活
  2. 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就是变化中的软件系统有一定的稳定性和延续性

2、里氏代换原则LSP :基类可出现,则子类可出现,反之不成立

    里氏代换原则是考量模型中对象之间是否符合继承复用的核心原则

3、依赖倒转原则DIP :依赖于抽象,不要依赖于具体

    目标:解耦,不让具体实现层的变化造成更多的影响
    优点:逻辑与实现的充分解耦
    缺点:不易实现,有时趋于繁琐——把握稳定性

4、接口隔离原则ISP :多个专门的接口好过一个总接口

    整洁——仅从美学角度分析
    系统的可维护性得到增强。向客户提供的public接口是一种承诺,一旦提供就很难收回。做为提供方,没人愿意多做承诺。而且一旦服务发生变化,很容易定位受影响的客户端和不受影响的客户端。

5、合成/聚合复用原则CARP:能用合成/聚合就不要用继承

    继承的优点

         新的实现容易,超类功能可以通过集成自动进入子类
         修改或扩展继承而来的实现较为容易

    继承的缺点
         继承会破坏封装,因为继承会将超类的实现细节暴露给子类——白箱复用
         如果超类的实现发生改变,则子类也不得不改变——牛鞭效应
         从超类继承而来的实现是静态的,无法在运行时间内改变,缺乏灵活性

6、迪米特法则LoD:不要与陌生人说话

    别称:LKP(Least Knowledge Principle),最少知识原则——一个对象应当对其他对象有尽可能少的了解,也应当尽量少的被其他对象了解

    狭义迪米特:如果两个类不必直接通信则不建立通信,通过第三方转发

      广义迪米特:要注意信息的隐藏

 

Spring3的源代码,大量运用了设计模式,而且非常精巧。不得不佩服。DIP,ISP得到了充分地体现这样的代码,看起来真得是非常舒服……

你可能感兴趣的:(设计模式)