理解聚合、关联、组合

Understanding the Aggregation, Association, Composition

我的代码中有以下场景,想了解 类 之间的聚合、组合、关联关系。

1)

class A : IDisposable
{
    private B objB;

    public A(B )
    {
        objB = new B();
    }

    public void Dispose()
    {
        objB.Dispose();
    }
}

2)

class A : IDisposable
    {
        private B objB;

        public A(B objB)
        {
            this.objB = objB;
        }

        public void Dispose()
        {

        }
    }

3)

class A : IDisposable
    {
        private B objB;

        public A()
        {

        }

        public void Sample()
        {
            objB = new B();
        }

        public void Dispose()
        {
            if (objB != null)
            {
                objB.Dispose();
            }
        }
    }

4)

class A : IDisposable
    {

        public A()
        {

        }

        public void Sample()
        {
            using (B objB = new B())
            {
                //Do some operation
            }

        }

        public void Dispose()
        {

        }
    }

简洁

关联 - 有两个对象相互了解,但不能影响彼此的生命周期。

Composition - 有两个 classes:AB .classA的对象包含aclassB对象,逻辑上不能 在没有 class 的情况下创建 B.

聚合 - 是"has a"关联关系的变体;聚合比关联更具体。它是代表部分-整体或部分关系的关联。

在您的示例中,1 和 3 是 Compositions,因为它们 contain class B object.Example 4是关联,因为它只知道关于class Bonly 将它的对象用作本地 variable.Example 2 和 Aggregation.

更多内容可以在wiki中阅读 https://en.wikipedia.org/wiki/Class_diagram

已编辑:

组合聚合之间的区别。

组成关系:当试图表示真实世界的整体-部分关系时,例如发动机是汽车的一部分。
聚合关系:表示软件或数据库关系时,例如汽车模型发动机 ENG01 是汽车模型 CM01 的一部分,因为发动机 ENG01 也可能是其他汽车模型的一部分。

在您的示例 1 中,您在代码中的 class A.Based 中创建了一个 class B 的对象,您不能提供 class 的创建对象B 到 class A 的另一个对象。 但是在您的示例 2 中,您将对象 B 作为 parameter.So 您可以创建 class A 的许多对象并为它们提供相同的对象 B