GRASP Polymorphism Pattern - GRASP之多态性模式
2007-12-13 20:24Update
多态性模式(Polymorphism)是GRASP扩展模式的一种,它通过多态操作把基于类型的可变行为的定义职责分配给行为发生的类。
问题
根据类型(类)的不同而发生变化的行为的定义职责,应该分配给谁?
问题比较抽象难懂,我们通过举例来解释一下。
比如物体的移动行为,不同的物体有不同的移动方法,比方说汽车与人的移动方法不一样。
在面向对象设计中,怎么样分配此类行为的定义职责呢?或者说,此类行为应该在哪定义怎么定义呢?
Polymorphism模式所提倡的解决方案
Polymorphism模式提倡通过多态操作把基于类型的可变行为的定义职责分配给行为发生的类。
又是一个抽象的概念。我们来解释一下。
多态性是面向对象的重要概念之一。所谓多态性,简单地说,就是具有同一接口的不同对象对相同的消息具有不同的行为。或者说同一消息作用于不同的对象,而产生不同的结果。
传统的设计方法,当类型发生变化时,利用条件判断语句对类型进行判断,然后执行不同的行为。
Polymorphism模式把各变化的“行为”定义职责分别分配给具有相同操作行为界面的通用接口的实现子类,利用多态性适应行为的可变性。
应用Polymorphism模式的好处
- 避免重复代码
- 避免重复的分歧条件
- 易扩展。只要实现了统一的通用接口,便可实现行为的扩展
Polymorphism模式的应用例
上面的例子:物体的移动行为,应用Polymorphism设计模式,它的类图便是:如果我们需要扩展“移动”行为,只需简单地创建一个实现IRunner接口的类。
其他应用Polymorphism模式的例
设计模式之Command - 命令模式 [GoF]
设计模式之Strategy - 策略模式 [GoF]
Dependency Inversion Principle (DIP) - OO设计的依赖倒置原则
- Relative Articles
- GRASP设计模式 - 概要篇 - (2007-12-16 19:59)
- GRASP Protected Variations Pattern - GRASP之变化预防模式 - (2007-12-13 20:32)
- GRASP Pure Fabrication Pattern - GRASP之纯虚构模式 - (2007-12-13 20:27)
- GRASP Indirection Pattern - GRASP之间接性模式 - (2007-12-12 22:36)
- GRASP Controller Pattern - GRASP之控制器模式 - (2007-12-12 22:34)
- GRASP Low Coupling Pattern - GRASP之低耦合模式 - (2007-12-12 22:32)
- GRASP High Cohesion Pattern - GRASP之高内聚模式 - (2007-12-12 22:30)
- GRASP Creator Pattern - GRASP之创建者模式 - (2007-12-12 22:28)
- GRASP Information Expert Pattern - Grasp之信息专家模式 - (2007-12-11 21:57)
- 面向对象设计的原则指南 – 概要篇 - (2007-12-10 22:06)