GRASP原则

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/**
    * 【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   anpeiyong  阅读(145)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示