加载中...
扩展对象模式允许在不修改原有类的前提下,为对象动态附加新的接口和能力。客户端可以在运行时查询对象是否支持某扩展并获取相应接口,从而实现灵活的功能扩展。

| 模式类别 | 结构型 |
| 又称 | Extension Interface |
| 核心机制 | 接口查询 |
| 典型应用 | 插件、组件模型 |
| 相关模式 | 装饰器、访问者 |
扩展对象模式(Extension Object)是一种支持在运行时为对象增添新接口的设计模式,它让一个对象在不改动其原始定义的情况下,按需暴露额外的扩展接口,客户端通过查询机制获取这些接口来使用附加功能。
随着系统演化,常常需要给已有类型增加新的能力,但直接修改原类会破坏稳定性,继承又会导致组合爆炸。扩展对象模式提供了另一条路:核心对象保持精简,把可选功能封装成独立的扩展接口,对象持有这些扩展的集合。客户端先询问对象是否支持某个扩展,若支持便取得对应接口再调用。
该模式在插件系统、组件模型和可扩展框架中十分常见。微软的组件对象模型通过查询接口的方式支持一个组件暴露多个接口,即体现了扩展对象的思想。文档编辑器、集成开发环境等需要第三方扩展功能的系统也常采用类似机制。
问:扩展对象模式和装饰器模式有何不同?答:装饰器包裹原对象并保持相同接口以增强行为;扩展对象则是为对象附加全新的、不同的接口,客户端需要主动查询才能使用,面向的是能力发现而非透明增强。
问:它的缺点是什么?答:客户端必须先查询再使用,代码变得繁琐,类型安全也不如静态设计;此外扩展间的依赖管理会随扩展增多而复杂,需要良好的约定支撑。

| 模式类别 | 结构型 |
| 又称 | Extension Interface |
| 核心机制 | 接口查询 |
| 典型应用 | 插件、组件模型 |
| 相关模式 | 装饰器、访问者 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧