聚合和相识
在《模式设计》一书中,聚合与相识的定义分别如下, 聚合 意味着一个对象拥有另一个对象或对另一个对象负责。一般我们称一个对象包含另一个对象或者是另一个对象的一部分。 相识 意味着一个对象仅仅知道另一个对象。有时相识也被称为“关联”或“引用”关系。相识的对象可能请求彼此的操作,但是它们不为对方负责。 CSDN讨论社区的一个例子能够很好的说明两者的区别。 ?????? 聚合对象包容了被聚合对象,或者说,聚合对象控制被聚合对象的生命期,在C++中,如果被聚合对象在聚合对象中是以成员变量的形式存在的,那么二者同生同 死。如果被聚合对象是以其指针方式被聚合的,它有可能是延迟构造并可能是提前析构的,即被聚合对象诞生于聚合对象之后,死于聚合对象之前。 private: ??????????????????? m_pAgg3 ? = ? NULL; ????????????????? if( ? m_pAgg3?? != ? NULL ? ) private: ????????????????? ASSERT(pA);?????????//如果pA == NULL,则中断程序 class ? B?的实例和成员m_pA所指向的对象之间的关系即为相识关系。构造B时如果提供的参数pA不为NULL,则B的实例即与参数pA所指向的对象之间建立了 相识关系。如果参数pA为NULL,还可以通过Attach建立相识关系,此时一般不允许Attach函数的参数pA为NULL。通过Detach解除相 识关系。 综上,聚合关系是说,一个对象的构造和析构都在另一个函数里面进行,聚合对象对被聚合对象的实现负责。相识关系是说,一个对象对另一个对象具有引用访问方式,而两个对象本身独立负责自身的构造和析构。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- [每日一题] 11gOCP 1z0-053 :2013-10-11 Flashback Data Ar
- mapred-site.xml配置信息说明
- .net – XmlSerializer:删除不必要的xsi和xsd命名空间
- oracle的concat、convert、listagg函数(字符串拼接和类型转
- react-native 极光推送(jpush-react-native)
- ios – 如何调用sqlite3_errmsg来了解sqlite3_prepare_v2失
- 在Xcode帐户首选项中,如何刷新连接到Apple ID的团队?
- Vue学习之路第二篇:插值表达式
- 在xcode中不支持运行ios 12.1的iPhone 5s
- UML补充学习(关联、依赖、聚合、组合、泛化)