Grasp 模式包括 创建者(Creator),信息专家(Information Expert),高内聚(High Cohesion),低耦合(Low Coupling)、控制器(Controller)、多态(Polymorphism)、间接性(Indirection)、纯虚构(Pure Fabrication)、防止变异(Protected Variation)。
只简单谈几种,剩下的有空补上,形成一个比较系统的资料。
多态 (当不同对象的服务类似或者相关时,可以为这些服务指定相同的名字)
处理基于类型的选择?如何创建可插拔的软件结构?
解决:不要测试对象类型,或者通过条件来执行不同对象的选择。
功能:多态能够完成“如何组织以处理类似的变化”。基于多态的设计能被简单的扩展以减小变化的影响。
对于在OO语法,意味着多态要使用接口和抽象类。二者的使用区分(建议): 想实现多态,又不想受限于特定的类型结构,可考虑用接口。如果,已使用了抽象类来实现多态,就只能沿用抽象类(多在于扩展时)。
Gof中基于多态的设计模式:适配器,命令,组合,代理,状态,策略模式。(需要认真体会一下)
防止变异(Protected Variation)
问题:如何设计对象、子系统和系统,使其内部变化或不稳定不会对其他产生不良影响?
解决:识别预计变化之外,在这些变化之外创建稳定接口。
专家模式
问题: 谁来创建对象?
解决:赋于知道对象最多的(对象)来创建。
专家的权衡(选择):
1. 当有多个局部专家时:应将职责赋予具有主要信息的专家(它具有更强的支配力);
2. 当几个局部专家信息差不多时,应考虑内聚与耦合性;
3. 当上面两者都差不多时,就考虑软件在未来可能的演化以及信息专家、耦合、内聚来做一个权衡。