设计模式之面向对象设计原则

    最近在学习设计模式的相关知识, 本想上来就先分析几个设计模式练练手, 但最后还是觉得来点虚的, 说一下面向对象分析与设计的一些原则, 那么设计原则和设计模式之间到底是什么关系呢, 说简单一点, 就是: 设计模式是设计原则的一些具体体现. 复杂一点说, 就是: 设计原则是思想上的指导, 而设计模式是实现上的手段. 形象一点说, 设计原则是不是就相当于接口, 而设计模式就是一个一个的实现类, 每个实现类可以实现一个或多个接口. 这是不是有一个缺点, 就是必须全盘接受接口中的抽象方法, 如果一个接口中的方法与另一个接口中的方法是相悖的, 那么是不是我们只能选择一个, 这一点说明了什么呢: 设计模式只是一个指导, 在实际应用的时候我们很难去完全遵守, 总会有意无意的违反一些设计原则或者是部分的设计原则, 有句话说的很好:"设计是一种危险的平衡艺术". 好了, 不说废话了, 下面介绍一下, 比较常见的面向对象设计原则: 

    1. 单一职责原则(Single Pesponsibility Principle)

标准解释: 一个类应该仅有一个引起它变化的原因. 

我的理解: 一个类如果有多个引起它变化的原因(方法), 那么方法是不是有可能耦合在一起, 如果更改了其中一个方法, 那么势必会影响到其他方法的实现.这样的设计是不是就很脆弱, 这就是所谓的单一职责原则.

    2. 开放-封闭原则(Open-Closed Principle)

标准解释: 一个类应该对扩展开放, 对修改关闭

我的理解: 类的行为(方法)是可以扩展的, 但是必须是在不修改已有代码的情况下进行拓展. 这听起来是不是有点矛盾, 怎么才能实现呢, 其实很简单, API里面实现好了很多的类, 想一想他是不是就是体现了这一个原则(貌似我以前动过修改源代码的想法, 后来发现源代码是只读的).

    3. 里氏替换原则(Liskov Substitution Principle)

标准解释: 子类型必须能够替换掉他们的父类类型

我的理解: 里氏替换貌似是实现开放-封闭原则的重要依据, 开闭原则要求对扩展开放, 实现扩展的手段是什么? 不就是使用继承么, 那么里氏替换原则是不是就保证了子类型可以正确的替换父类型, 为什么要这么说呢? 因为只有正确的替换, 才能实现扩展, 否则即使拓展了也会出错.

    4. 依赖倒置原则(Dependence Inversion Principle)

标准解释: 要依赖抽象, 不要依赖具体类, 要做到依赖倒置应该做到:高层模块不应该依赖底层模块, 二者都应该依赖于抽象; 抽象不应该依赖于具体实现, 具体实现应该依赖于抽象.

我的理解: 依赖倒置简单一点说就是化主动为被动, 也就是不主动去分配资源创建对象, 而是让别人替自己做这些工作.

    5. 接口隔离原则(Interface Segregation Principle)

标准解释: 不应该墙壁客户依赖于他们不用的方法

我的理解: 按照不同客户的需要分离成为针对客户需求的接口, 这些接口中只包含客户需要的操作声明, 这样既方便了客户使用, 又能防止因客户误用接口而导致的错误.

    6. 最少知识原则(Least Knowledge Principle)

标准解释: 只和你的朋友谈话

我的理解: 减少对象之间的交互, 对象只和自己的朋友交互, 以达到减少类之间耦合的效果. 这样在修改某一个部分的时候, 就不会影响其他部分, 使系统更加有利于维护.

    还有一些其他的原则, 就一一分析了, 接下来, 也该正式进入设计模式了.

你可能感兴趣的:(面向对象设计原则)