今天由同事突然对这个问题产生兴趣,大家就聚在一起讨论,在这里做个小结。
一般的理解:
聚合:类似于集合,比如一个公司是员工的集合,他们之间构成聚合关系。
组合:更强调整体与部分的关系:整体离不开部分,部分不能离开整体单独存在。比如人的身体和身体上的器官。
c++的表示:
聚合:
class A{}
class B{
A *a; // 这里只是一个指针,并不负责A对象的死活
}
组合:
class A{}
class B{
A a; // 在这里,A对象的生命周期由B负责
}
java的表示:
聚合:
class A{}
class B{
private A a;
public void setA(A a) {
this.a = a;
}
public A getA() {
return a;
}
}
组合:
class A{}
class B{
private A a = new A();
....// 这里没有setA的方法
}
结论:聚合偏向松散的关系,对象之间依赖关系较弱,而组合则偏向高耦合。对于内存使用,聚合关系的个体可以被聚合外部的对象使用(聚合不负责内部个体的生命周期)。而组合则不行(组合负责内部个体的生命周期),外部对象只能通过该组合的接口(API)间接使用组合内的个体。
分享到:
相关推荐
设计模式是经验的结晶,代表着在特定上下文中解决问题的最佳实践,有助于提高代码的可读性、可维护性和团队间的沟通效率。 设计模式分为三大类:创建型模式、结构型模式和行为型模式。 1. 创建型模式: - 工厂...
此外,类图还可以使用聚合和组合来表示更复杂的关系,聚合表示部分与整体的弱关联,而组合则表示更强烈的拥有关系。 在实际应用中,系统建模与设计通常采用统一建模语言(UML)进行表达。UML提供了一系列图形表示...
其次,我们来谈谈面向对象编程的两大核心设计方法:继承和组合。继承是OOP中的一个重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。这样可以实现代码重用,提高开发效率,并有助于实现多态性。在...
例如,在绘制E-R图时,我们可以通过UML的关联关系(Association)表示实体间的联系,用泛化关系(Generalization)表示继承关系,用聚合关系(Aggregation)和组合关系(Composition)来表示部分-整体的关系。...
设计模式之UML 类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合) 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试...
首先,我们来谈谈创建型模式。创建型模式主要用于对象的创建过程,它们可以控制创建对象的方式,提供更为灵活和可复用的对象创建机制。 1. Singleton(单例模式)是一种常见的设计模式,在这种模式下,类有且仅有一...
这种做法允许类间建立关联关系,比如在设计模式中常见的组合模式和聚合模式。例如: ```cpp class BaseClass { public: void baseFunction() {} }; class DerivedClass { private: BaseClass baseObj; // 类包含...
此外,类还可以通过组合(聚合)关系包含其他类的对象,形成复杂的系统结构。在描述中提到的VS2005添加类的过程,展示了如何自动生成头文件(h)和源文件(cpp)以及如何在类中声明和使用其他类。例如,LoftManager...
它通过将IP地址和一个前缀(网络掩码的位数)组合在一起,形成一种紧凑的表示方式,有助于避免IP地址的浪费和路由聚合。 NetReg与CIDR的结合,意味着它可以管理和分配这些具有CIDR格式的IP地址段,为网络中的设备...
结构体是一种聚合数据类型,可以将多个值组合在一起,类似于其他语言中的类。 Go还强调并发编程,通过goroutines(轻量级线程)和channels实现。Goroutines允许开发者轻松地并行执行任务,而channels则提供了一种...