zoukankan      html  css  js  c++  java
  • 设计模式原则

    内聚与耦合

    耦合:

    也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。

    模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。

    若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就越高。

    内聚

    故名思议,表示内部间聚集、关联的程度,那么高内聚就是指要高度的聚集和关联。高内聚是指类与类之间的关系而定,高,意思是他们之间的关系要简单,
    明了,不要有很强的关系,不然,运行起来就会出问题。一个类的运行影响到其他的类。由于高内聚具备可靠性,可重用性,可读性等优点,模块设计推荐采用高内聚。
    内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。

    一、单一职责原则

    类的职责要单一,控制类的粒度大小,不能将太多的职责放在一个类中。单一职责原则是实现高内聚、低耦合的指导方针,设计人员需要发现类的不同职责并将其分离。

    优点:

     1.可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;

     2. 提高类的可读性,提高系统的可维护性;

     3.变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

    二、开闭原则

    一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。为了满足开闭原则,需要对系统进行抽象化设计,

    抽象化是开闭原则的关键。为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。如果需要修改系统的行为,无须对抽象层进行任何改动,

    只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。

    开闭原则是最基础的设计原则,下面的五个设计原则都是开闭原则的具体形态.

    优点

        1.提高复用性,抽象类粒度小,可复用性高,

        2.提高维护性,不需要关注抽象类维护,只负责实例扩展。

        3.面向对象开发的要求,设计之初考虑尽可能多的变化,留下接口,等待“可能”转变为实现

    三、里氏代换原则

    任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,

    而派生类也能够在基类的基础上增加新的行为。在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

    四、依赖倒转原则

    针对接口编程,依赖于抽象而不依赖于具体。高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

    代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程

    五、接口隔离原则

    使用多个隔离的接口,比使用单个接口要好。降低类之间的耦合度。不应该依赖那些它不需要的接口。用多个专门的接口,而不使用单一的总接口。

    每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干。

    六、合成复用原则

    尽量使用合成/聚合的方式,尽量使用对象组合,而不是使用继承。一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,

    使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的

    七、迪米特法原则(最少知道原则

    一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。当一个模块修改时,就会尽量少的影响其他的模块,扩展会相对容易。

  • 相关阅读:
    AutoCAD 相关的在线多级同步的一些资料收集 beta
    FUSLOGVW 工具来报告错误的具体信息
    [转]阿朱:帮助过我的那些书和人
    Accelerated C++ 习题答案
    一些帮助理解的短视频
    Visual Studio 控制台程序无法输出中文
    [翻译]ObjectArx.Net下Invoke非托管的函数
    LINQ&EF任我行(二)LinQ to Object (转)
    软件编程中的21条法则[转]
    VAssistX的VA Snippet Editor使用小讲 [转]
  • 原文地址:https://www.cnblogs.com/socks/p/13437242.html
Copyright © 2011-2022 走看看