关于 复合 和 继承 和 委托

13 篇文章 0 订阅

复合关系:

在这里插入图片描述
为何不用继承?因为用继承的话,父类的接口仍然可以调用。

所以这里 使用所谓的 组合,所谓的适配器Adapter就是这样实现的:
这样组合起来,底层容器是deque,queue可以调用deque的接口去完成自己的接口,而deque里多于的接口,queue是希望屏蔽掉的。而这个的组合,就使得deque的接口没有暴露在外,而继承则会使得deque的接口可以使用。

在这里插入图片描述

复合关系下的构造和析构

在这里插入图片描述

委托关系(Delegation)

或者叫 复合 by 引用
在这里插入图片描述
与上面提到的 复合 关系 有些类似,不过不同的是,string类里面是另一个类的 指针,指向另一个类。
而复合 关系 里面是 含有另一个类的对象。

复合 关系为什么不叫委托呢?术语问题。。

跟复合不同的是 ,不需要同步 构造。

这里的委托关系,可以在需要使用该类时,再去产生该类指针的对象,和调用其方法。

上面的 pimpl 指的是 point to implemention。指向实现。另外一个名字叫做 Handle and Body.

即 右边的body 可以变动的。不管右边如何变动,都不会影响到客户端。
这样的手法也称之为:编译防火墙。左边永远不用再编译,需要重新编译只是右边的body部分而已。(低耦合)

上图中,左下角的图:引用计数。共享内容
比如C++的 共享智能指针:my github

要跟其他对象共享,就不能牵一发而动全局。什么意思?
现在a b c三个的内容都是hello,a要改变内容的时候,不能去影响到b和c。
改的时候 给了一份副本来改,称之为copy on right

继承

在这里插入图片描述
另外,基类的析构函数需要是 虚函数。不然的话不会有下面 子类析构的 由外而内

小结

复合 是 has-a
继承 是 is-a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值