知识卡片

继承把两个变化维度锁死引出桥梁模式

普通读书笔记卡 · 1995

内容

公司和产品是两个各自独立变化的维度,用继承表达(HouseCorp extends Corp等)会把 两个维度焊死在同一条链上,换产品要新增子类。解法是让Corp不靠继承区分产品,而是持有 Product抽象类型引用,通过构造函数传入具体产品——公司和产品变成两条可独立扩展的继承 体系,靠一次对象组合关联,这正是[[桥梁模式的定义与四个角色]]要解决的问题。

参考来源

- 位置:《设计模式之禅(第2版)》第29章《桥梁模式》29.1节(源文件:_epub-src/text/part0131.html) - 结论依据:原文用房地产公司/服装公司/山寨公司的演化案例说明继承方式下"每次换产品就要新增一个继承类",改为关联关系后"工厂想换产品?太容易了!",并总结"类都增加了,高层模块也需要修改……Corp类和Product类都可以自由地扩展,而不会对整个应用产生太大的变更,这就是桥梁模式"。 - 原始内容:既然产品和工厂绑得太死,那我就给你来松松,改变设计……公司和产品之间建立关联关系,可以彻底解决以后山寨公司生产产品的问题,工厂想换产品?太容易了!……你唯一要修改的就是Client类……Corp类和Product类都可以自由地扩展,而不会对整个应用产生太大的变更,这就是桥梁模式。