桥接模式:
(1),继承很多情况下会带来麻烦,比如:对象的继承关系在编译时就定义好了,所以无法在运行时改变从弗雷继承的实现。子类的实现与它的弗雷有非常紧密的依赖关系,以至于弗雷视线中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类代替。这种依赖关系限制了灵活性并最终限制了复用性。
(2),合成/聚合服用原则(CARP):尽量使用合成/聚合,尽量不要使用类继承。
(3),聚合表示一种弱的‘拥有’关系,体现的是 A 对象可以包含 B 对象,但 B 对象不是 A 对象的一部分;合成则是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
(4),合成/聚合服用原则的好处:优先使用合成/聚合有助于你保持每个类被封装,并被集中在单个任务上。这种类与类继承层次会保持较小规模,并且不太可能增长为不可控制得庞然大物。
(5),桥接模式(Bridge):将抽象部分与它的实现部分分离,使他们都可以独立的变化。
(6),抽象与它的实现分离并不是让抽象类与派生类分离,因为这样没有任何意义。实际指的是抽象类和它的派生类用来实现自己的对象。
(7),实际系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少他们之间的耦合。
Effective C++:
1:明智而审慎地使用多重继承
(1),多重继承比单一继承复杂。它可能导致新的歧义性,以及对 virtual 继承的需要。
(2),virtual 继承会增加大小、速度、初始化(及赋值)复杂度等等成本。如果 virtual base classes 不带任何数据,将是最具使用价值的情况。
(3),多重继承的确有正当用途。其中一个情节涉及“public 继承某个 Interface class" 和”private 继承某个协助实现的类“的两相组合。