GRASP原则

 

 /**
     * 【GRASP】
     *      https://blog.csdn.net/u013249965/article/details/51779634
     *
     *      what?
     *          (General Responsibility Assignment Software Patterns)通用职责分配软件模式;
     *
     *          要学习设计模式,有些基础知识是必须要知道的,设计模式是关于类和对象的一种高效、灵活的使用方式;
     *          (必须先有类和对象,才能有设计模式的用武之地,类和对象从哪出来?需要比设计模式更重要更经典的GEASP模式)
     *
     *          GRASP一共包含9种模式,如何决定一个系统有多少对象,每个对象都包括什么职责,GRASP模式给出了最基本的指导原则;
     *          (尽快掌握、理解这些原则,因为这是如何设计一个面向对象系统的基础。可以说,GRASP是学习使用设计模式的基础)
     *
     *      1、信息专家Infomation Expert
     *          信息专家模式是面向设计的最基本原则,是我们平时使用最多,应该跟我们的思想融为一体的原则;
     *          也就是说,我们设计对象(类)的时候,如果某个类拥有完成某个职责所需要的所有信息,那么这个职责就应该分配给这个类来实现;
     *          这时,这个类就是相对于这个职责的信息专家;
     *
     *      2、创建者Creator
     *          实际应用中,符合下列任一条件的时候,都应该由类 A 来创建类 B,这时 A 是 B 的创建者:
     *              a、A 是 B 的聚合
     *              b、A 是 B 的容器
     *              c、A 持有初始化 B 的信息(数据)
     *              d、A 记录 B 的实例
     *              e、A 频繁使用 B
     *
     *          如果一个类创建了另外一个类,那么这两个类之间就有了耦合,也可以说产生了依赖关系。
     *          依赖或耦合本身是没有错误的,但是他们带来的问题就是在以后的维护中产生连锁反应,而必要的耦合是逃不掉的,我们能做的就是正确的创建耦合关系,不要随便建立类之间的依赖关系,那么该如何去做呢?
     *          就是要遵守创建者模式规定的基本原则,凡是不符合以上条件的,都不能随便用 A 创建 B。
     *
     *      3、低耦合Low coupling
     *          低耦合模式的意思就是要我们尽可能地减少类之间的连接。
     *          其作用非常重要:
     *              a、低耦合降低了因一个类的变化而影响其他类的范围。
     *              b、低耦合使用类更容易理解,因为类会变得简单,更内聚。
     *
     *          下面这些情况会造成类 A、B 之间的耦合:
     *              a、A 是 B 的属性
     *              b、A 调用 B 的实例的方法
     *              c、A 的方法中引用的 B,例如 B 是 A 方法的返回值或参数。
     *              d、A 是 B 的子类,或者 A 实现 B
     *
     *      4、高内聚High cohesion
     *          高内聚的意思是给类尽量分配内聚的职责,也可以说成是功能性内聚的职责。
     *          即功能性紧密相关的职责应该放在一个类里,并共同完成有限的功能,那么就是高内聚合。
     *          这样更有利于类的理解和重用,也便于类的维护。
     *
     *      5、控制器Controller
     *          用来接受和处理 系统事件 的职责,一般应该分配给一个能够代表整个系统的类,这样的类通常被命名为“XX处理器”、“XX协调器”或“XX会话”。
     *
     *          关于控制器类,有如下原则:
     *              a、系统事件的接收与处理通常由一个高级类来代替。
     *              b、一个子系统会有很多控制类,分别处理不同的事务。
     *
     *      6、多态Polymorphism
     *          这里的多态跟 OO 三大基本特征之一的“多态”是一个意思。
     *
     *      7、纯虚构Pure Fabrication
     *          这里的纯虚构跟我们常说说的纯虚构函数意思相近。
     *          高内聚低耦合,是系统设计的终极目标,但是内聚和耦合永远都是矛盾对立的。
     *          高内聚以为这拆分出更多数量的类,但是对象之间需要协作来完成任务,这又造成了高耦合,反过来依然。
     *          该如何解决这个矛盾呢?这个时候就需要纯虚构模式,由一个纯虚构的类来协调内聚和耦合,可以在一定程度上解决上述问题。
     *
     *      8、间接Indirection
     *          “间接”顾名思义,就是这个事不能直接来办,需要绕个弯才行。
     *          绕个弯的好处就是,本来直接会连接在一起的对象彼此隔离开了,一个变动不会影响另一个。
     *          就像我在前面的低耦合模式里说的一样,“两个不同模块的内部类之间不能直接连接”,但是我们可以通过中间类来间接连接两个不同的模块,这样对于这两个模块来说,他们之间仍然是没有耦合/依赖关系的;
     *
     *      9、受保护变化Protected Variations
     *          预先找出不稳定的变化点,使用统一的接口封装起来,如果未来发生变化的时候,可以通过接口扩展新的功能,而不需要去修改原来旧的实现。
     *          也可以把这个模式理解为 OCP(开闭原则),就是说一个软件实体应当对拓展开放,对修改关闭。
     *          在设计一个模块的时候,要保证这个模块可以在不需要被修改的前提下可以得到拓展。
     *          这样做的好处就是通过拓展给系统提供了新的职责,以满足新的需求,同时又没有改变系统原来的功能。
     *
     */

  

posted on 2022-02-10 14:39  anpeiyong  阅读(144)  评论(0编辑  收藏  举报

导航