通用职责分配模式(GRASP)一共有9个模式,下面是其中的3个模式:
创建者模式:
创建对象是面向对象系统中最常见的活动之一,因此应该有一些通用的原则以用于创建职责的分配,如果分配的好,设计就能够支持低耦合,提高清晰度,封装性和可复用性。
如果下列条件之一为真,将创建类A的实例的职责分配给类B:
a.B包含或组成聚集A
b.B记录A
c.B直接使用A
d.B具有A的初始化数据,并且在创建A时会将这些数据传递A。因此对于A的创建而言,B是专家。
e.B是对象A的创建者
如果有一个以上的选项适用,通常首选聚集或包含A的类B。
创建者模式指导我们分配那些与创建对象有关的职责。基本意图是寻找在任何情况下都与被创建对象具有连接的创建者。创建者模式建议,封装的容器或记录是创建其所容纳或记录的事物的很好的候选者。
对象的创建者常常具有相当的复杂性,例如为了性能而使用回收的实例,基于某些外部特性值有条件的创建一个或一族类的实例。在这些情况下,最好的办法是把创建职责委派给称为具体工厂或抽象工厂的辅助类,而不是使用创建者模式所建议的类。
信息专家模式
信息专家经常用于职责分配,这是对象设计中不断使用的基本原则。专家并不意味着模糊或奇特的想法,它表达一种直觉,即对象完成与其所具有的信息相关的职责。
注意,完成职责往往需要分布在不同对象中的信息。这意味着许多局部的信息专家要通过协作来完成任务。
信息专家模式是对真实世界的模拟。我们一般把职责分配给那些具有完成任务所必需的信息的个体。
在某些情况下,专家模式建议的方案也许并不合适,通常这是由于耦合与内聚问题所产生的。
我们可以用设计要分离主要的系统关注来改善设计中的耦合和内聚。该模式通常支持高内聚。
低耦合模式
耦合是对某元素与其他元素之间的连接、感知和依赖程度的度量。具有低耦合的元素不会过度依赖于其他元素;“过度”是与语境相关的,但我们必须对此进行检查。这些元素包括类、子系统、系统等。
具有高耦合的类依赖于许多其他的类,这样的类或许不是我们所需要的,有些类会遇到以下问题:
a.由于相关类的变化而导致本体的被迫变化
b.难以单独理解
c.由于使用高耦合类时需要它所依赖的类,因此很难重用。
低耦合是在制定设计决策期间必须牢记的原则,它是应该不断的考虑的基本目标。
在C++ JAVA 和C#这样的面向对象语言中,从TypeX到TypeY耦合的常见形式包括:
a. TypeX具有引用TypeY的实例或TypeY自身的属性
b. TypeX对象条用TypeY的对象服务。
c. TypeX具有以任何形式引用TypeY的实例或TypeYT自身的方法。通常包括类型TypeY的参数或局部对象,或者由消息返回的对象是TypeY的实例。
d. TypeX是TypeY的直接或间接子类
e. TypeY是接口,而TypeX是此接口的实现。
低耦合提倡职责分配要避免产生具有负面影响的高耦合。
低耦合支持在设计时降低类的依赖性,这样可以减少变化所带来的影响。低耦合不能脱离专家和高内聚等其他模式孤立的考虑,而应作为影响职责分配的原则之一。
子类与其超类之间有很强的耦合性。因为这是一种强耦合形式,所以要考虑涉及超类导出的任何决定。
没有绝对的度量标准来衡量耦合程度的高低,重要的是能够估测当前耦合的程度,并估计增加耦合是否导致问题,一般说来那些有着自然继承关系的类和复用程度较高的类,具有较低的耦合性。
低耦合的极端例子是类之间没有耦合。这个例子违反了对象技术的核心隐喻:系统由相互连接的对象构成。对象之间通过消息通信。耦合过低会产生不良的设计,其中会使用一些缺乏内聚性、膨胀、复杂的主动对象来完成所有工作,并且存在大量被动、零耦合的对象来充当简单的数据知识库。对象之间的适度耦合,对于创建面向对象系统来说是正常和必要的,其中的任务是通过被连接的对象之间的协作来完成的。
分享到:
相关推荐
行为型模式则关注类或对象之间的交互和职责分配。 2. 单例模式 单例模式是最常见的创建型模式之一,它确保一个类只有一个实例,并提供全局访问点。在Java中,可以通过私有构造函数、静态私有变量和公共静态方法来实现...
长城物业部门职责部门通用职责.docx
杰克·韦尔奇与通用电气管理模式3.pptx
基于B/S模式高校通用题库系统研究与开发(毕业设计)
Scikit-Learn_4_通用学习模式_(机器学习_sklearn_教学教程tutorial)
G-1131通用型隔离分配、配电分配器pdf,G-1131通用型隔离分配、配电分配器
多样化通用技术教学模式探析
使用通用定时器4,定时器时钟为外部时钟模式2,计数器时钟由 ETRF 信号的任意有效边沿提供 预分频器值为1,重装载ARR寄存器值为5 使能ARR寄存器缓冲功能,并且仅在上/下溢才触发更新事件 TIM4外部时钟模式2使用的ETR...
项目部通用岗位职责汇编.pdf项目部通用岗位职责汇编.pdf项目部通用岗位职责汇编.pdf项目部通用岗位职责汇编.pdf项目部通用岗位职责汇编.pdf项目部通用岗位职责汇编.pdf项目部通用岗位职责汇编.pdf项目部通用岗位职责...
VC++做的一个通用动态分区分配存储管理系统图形化演示程序。 作者:青岛理工大学 袁晟凯 QQ314212034
行为型模式则关注对象的交互和职责分配,包括观察者模式、策略模式、模板方法模式等。 使用设计模式的好处包括: 提高软件的可维护性和可复用性,因为设计模式提供了通用的设计语言和最佳实践。 使代码更易于理解和...
通用数据访问模式的研究,陈卫,丁志强,运用面向对象的设计原则,将代理模式与工厂方法模式相结合,提出了一种新的通用数据访问模式。该模式能够支持多种关系型数据库管
苏州供电公司部门通用职责说明.docx
使用通用Repository模式的CRUD操作的MVC程序例子
本文介绍了在智能建筑管理系统中通用接口模式的设计与实现原理、及其特点
路面模式CLM4.5用户手册。路面模式CLM4.5用户手册。路面模式CLM4.5用户手册。路面模式CLM4.5用户手册。路面模式CLM4.5用户手册。
数据库访问类 C# 设计模式构建通用数据库访问类
联发科通用无暗角版V1(基于agc修改,非联发科机型也可使用,全模式无暗角且全模式夜景模式无bug).apk
1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象...
1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象...