GRASP-中文版(4)

2020-02-21 15:26

以上述“用户注册”的用例为例,对于问题领域里的类“用户(User)”,如果把“数据库操作的职责”分配给“用户(User)”,那么User类的内聚性大大降低。

应用Pure Fabrication模式,应该人工定义一个数据库管理的概念类UserDbMgr,把数据库操作的功能分配给它完成。 如图:

如图,分离Domain类User与非Domain类UserDbMgr,User类只保持问题领域中的信息。保证了高内聚性,和易重用性。

GRASP Indirection Pattern - GRASP之间接性模式

间接性模式(Indirection)是GRASP模式中解决类的关联问题的模式。

问题

为了避免类之间的直接关联,应该给什么样的类分配“关联”责任?

Indirection模式所提倡的解决方案

当多个类之间存在复杂的消息交互(关联)时,Indirection模式提倡类之间不直接进行消息交互处理(非直接),而是导入第三方类,把责任(多个类之间的关联责任)分配给第三方类,降低类之间的耦合程度。

应用Indirection模式的好处

- - -

高内聚。通过把“关联”的功能分散到第三方类,原来的类可以更加关注自身功能的实现。

低耦合。原本关联类之间不直接关联,降低类之间的耦合性。

高重用性。第三方类对“关联”功能的集中处理,与原来的类对自身功能的专注,有利于类的重用。

Indirection模式的应用例

应用Indirection模式的一个最好范例是GoF的Mediator(中介者)模式。 参考:设计模式之Mediator - 中介者模式[GoF]

GRASP Protected Variations Pattern - GRASP之变化预防模式

变化预防模式(Protected Variations)是GRASP扩展模式之一,它设计稳定的接口来应对将来可能发生的变化或其它不安定的因素。

问题

对存在于系统,子系统,或对象等元素中的各种变化或不安定的因素,为了不产生对其他元素的不利影响,在它们中间应该怎么样分配职责?

Protected Variations模式所提倡的解决方案

Protected Variations模式提倡在可预测的变化或不安定因素的周围,用稳定的接口来承担职责。

在面向对象设计中,面向接口编程便符合Protected Variations模式的概念。

有人把Protected Variations模式称为Don't Talk to Strangers(别跟陌生人说话)。因为它跟实现Protected Variations模式的考虑方法一致。

Don't Talk to Strangers别名Demeter法则:(LoD: the Law of Demeter),它的基本原则是:只跟直接依赖的对象通信(不要耦合没有明显通信需求的2个对象),也就是说2个对象之间,能不关联的就尽量不要关联。

所谓直接依赖的对象,例如有一个对象A,跟它直接依赖的对象有: 1, A对象本身

2, A的属性成员对象

3, 通过参数传送给A的对象(A的方法里参数) 4, A的方法内部生成的对象

为什么说LoD跟实现Protected Variations模式的考虑方法一致呢? 我们举例来说明。

假如,系统需要实现这样一个功能,把一段字符串保存到文件,打印机等输出设备。

这是一个可变的或者说存在不安定因素的功能需求,因为输出设备除了文件,打印机之外,还可能有数据库,屏幕终端,网络输出流等。 应用Protected Variations模式,我们为其定义一个能实现输出功能的稳定接口IOutputer,而具体的功能在具体的子类中实现,比如打印机输出类 PrinterOutputer,数据库输出类DatabaseOutputer,文件输出类FileOutputer等。 使用此“输出功能”的用户只要知道接口就行了。

也就是说,对于用户来说,用户的直接依赖对象只有父接口IOutputer,至于其子类诸如PrinterOutputer,DatabaseOutputer,FileOutputer等都属于陌生人。

应用Protected Variations模式的好处

- - -

Protected Variations模式的应用例

例:把一段字符串保存到文件,打印机等输出设备。 应用Protected Variations模式的类图:

提高系统对变化的应对能力。一旦系统的可预见的不安定因素发生变化(比如追加功能等),只需要生成一个已有的稳定接口的实现类就可以了,无需修改原来的类。 高内聚。具体的功能在各子类中实现,各类的内部功能具有高度聚集性。

低耦合。用户类只跟稳定接口通信,减少了跟其它陌生对象的关联的机会,降低了类之间的耦合性。

参考资料

Introducing Demeter and its Laws [LoD: the Law of Demeter]


GRASP-中文版(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小学校园安全管理制度

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: