知识卡片

抽象化角色构造函数强制指定实现者

普通读书笔记卡 · 1995.a.1

内容

[[桥梁模式的定义与四个角色]]中Abstraction特意声明带Implementor参数的构造函数, 而非提供无参构造靠setter注入,目的是用语法强制约束:子类构造时必须明确指定实现者, 不能创建”实现者未知”的半成品对象。发散:这在实现化角色本身有多个子接口、多套实现的 复杂场景下尤其重要——不强制传入明确实现者,调用方容易遗漏绑定,对象长期处于不稳定 状态,可读性和健壮性都会下降。

参考来源

- 位置:《设计模式之禅(第2版)》第29章《桥梁模式》29.2节(源文件:_epub-src/text/part0132.html) - 结论依据:原文解释增加带参构造函数的原因是"为了提醒子类,你必须做这项工作,指定实现者,特别是已经明确了实现者,则尽量清晰明确地定义出来",并补充"如果我们的实现化角色有很多的子接口,然后是一堆的子实现。如果在构造函数中不传递一个尽量明确的实现者,代码就很不清晰"。 - 原始内容:各位可能要问,为什么要增加一个构造函数?答案是为了提醒子类,你必须做这项工作,指定实现者……想想看,如果我们的实现化角色有很多的子接口,然后是一堆的子实现。如果在构造函数中不传递一个尽量明确的实现者,代码就很不清晰。