2016-06-20 97 views
0

我在我的代码中有以下方案,并且想要了解类之间的聚合,组合,关联关系。了解聚合,关联,合成

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() 
     { 

     } 
    } 

回答

0

简明

协会 - 有两个对象彼此了解,但他们不能影响对方的一生。

组成 - 有两类: .Object类的包含 B类对象,并不能逻辑而不类创建。

聚合 - 是“有”关联关系的变体;聚合比关联更具体。它是一个代表整体或部分关系的组织。

在你的例子,1和3是组合,因为它们含有 B类object.Example 4 协会,因为它只知道B类只有使用它的对象作为局部变量。示例2是和聚合

enter image description here

欲了解更多您可以在维基 https://en.wikipedia.org/wiki/Class_diagram

EDITED阅读:

差异和聚集之间组成

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

在你的例子1中,你在类A中创建了一个类B的对象。根据你的代码,你不能将创建的类B的对象赋予类A的另一个对象。 但是在你的例子2中,你给对象B作为参数。所以你可以创建许多类A的对象,并给它们相同的对象B

+0

感谢您的回答suren..I确信情景1,3,4 ..但我有与情景2怀疑。我感觉它的Aggregation.Please澄清 – ratty

+0

@ratty是你是对的.2是和aggregation.I编辑我的答案 –