4

osc_72814091的个人空间

 3 years ago
source link: https://my.oschina.net/u/5033515/blog/5017520
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
面向对象设计原则 - osc_72814091的个人空间 - OSCHINA - 中文开源技术交流社区

  设计原则是设计模式的理论基础,设计模式就是它们的实践。七大设计原则简单归纳如下表所示:

设计原则 概括 目的 开闭原则 对扩展开放,对修改关闭 降低维护带来的新风险 里氏替换原则 不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义 防止继承泛滥 依赖倒置原则 高层不应该依赖低层,要面向接口编程 更利于代码结构的升级扩展 单一职责原则 一个类只干一件事,实现类要单一 便于理解,提高代码的可读性 接口隔离原则 一个接口只干一件事,接口要精简单一 功能解耦,高聚合、低耦合 迪米特原则 不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度 减少代码臃肿 合成复用原则 尽量使用组合或者聚合关系实现代码复用,少使用继承 降低代码耦合

1、开闭原则

     原则思想: 软件实体应当对扩展开放,对修改关。
     描述:一个软件产品在生命周期内,都会发生变化,既然变化是一个既定的事实,当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
     优点:提高代码的可复用性,提高软件的可扩展性和可维护性。

2、里氏替换原则

     思想: 继承必须确保超类所拥有的性质在子类中仍然成。
     描述:子类可以扩展父类的功能,但不能改变父类原有的功能。子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法,子类中可以增加自己特有的方法。 反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范。
     优点:增加程序的健壮性, 类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。

3、依赖倒置原则

     思想:高层次的模块不应该依赖于低层次的模块,它们都应该依赖于抽象,抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
     描述: 在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多。  使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给它们的实现类去完成。依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。
     优点: 降低类间的耦合性; 提高代码的可读性和可维护性; 减少并行开发引起的风险。

4、单一职责原则

     思想:一个类(或方法www.jqmms.com)只负责一件事情。 就是控制类的粒度大小、将对象解耦、提高其内聚性。
     描述: 又称单一功能原则,这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。 如果一个对象承担了太多的职责,至少存在两个缺点:1、一个职责的变化可能会削弱或者抑制这个类实现其他职责的能力;2、当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费。
    优点:降低类和类的耦合, 降低类的复杂度, 提高可读性,增加可维护性和可拓展性,降低可变性的风险。

5、接口隔离原则

     原则思想:类和类之间应该建立在最小接口的上。
     描述: 要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。 要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
     优点:提高程序的灵活度,提高内聚,减少对外交互,使得最小的接口做最多的事情。

     注意: 接口的粒度需要合理定义,如果 定义过小,则会造成接口数量过多,使设计复杂化;如果定义太大,灵活性降低,无法提供定制服务,给整体项目带来无法预料的风险。

     接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:

        # 单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。

        # 单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。

6、迪米特原则(最少知道)

     原则思想:一个对象应当对其他对象有尽可能少地了解,简称类间解耦
     描述:一个类尽量减少自己对其他对象的依赖,原则是低耦合,高内聚,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。
     优点:低耦合,高内聚,提高类的可复用性和系统的可扩展性。

     注意: 过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。

7、合成复用原则

     原则思想:由于合成或聚合可以将已有对象纳入到新对象中,使之成为新对象的一部分,因此新对象可以调用已有对象的功能。

     描述: 它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。 一般而言,如果一个角色得到了更多的责任,那么可以使用合成/聚合关系将新的责任委派到合适的对象。当然,这种复用也有缺点。最主要的缺点就是通过这种复用建造的系统会有较多的对象需要管理。

     优点: 维持了类的封装性,成分对象的内部细节是新对象看不见的,所以这种复用又称为“黑箱”复用。新旧类之间的耦合度低,这种复用所需的依赖较少,新对象存取成分对象的唯一方法是通过成分对象的接口。复用的灵活性高,这种复用可以在运行时动态进行,新对象可以动态地引用与成分对象类型相同的对象。

    实际上,这些原则的目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性。 在实际开发过程中,并不是一定要求所有代码都遵循设计原则,而是要综合考虑人力、时间、成本、质量,不刻意追求完美,要在适当的场景遵循设计原则。这体现的是一种平衡取舍,可以帮助我们设计出更加优雅的代码结构。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK