天天看點

12.組合(Composition)

      組合也是關聯關系的一種特例,它展現的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合;它同樣展現整體與部分間的關系,但此時整體與部分是不可分的,它們具有統一的生存期,整體的生命周期結束也就意味着部分的生命周期結束,部分對象與整體對象之間具有同生共死的關系,組合關系中的部分,是不能在整體之間進行共享的。比如人和眼睛,當然,有人會說現在醫學發達,眼睛可以移植給别人,如果是這樣的話,你可以了解人和眼睛的關系為聚合,這都是在具體的場景下來确定的。表現在代碼層面,和關聯關系是一緻的,隻能從語義級别來區分。

      在組合關系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。  在UML中,組合關系用帶實心菱形的直線表示。

      UML示例圖如下所示:

12.組合(Composition)
      示例代碼如下:

class Eye
{
    deinit
    {
        print("Eye deinit");
    }
}

class People
{
    var eye: Eye;
    
    init()
    {
        eye = Eye();
    }
    
    deinit
    {
        print("People deinit");
    }
}

var people: People? = People();

//people和eye生命周期同時結束
people = nil;      

      從上面我們可以看到,Eye對象是在People對象裡面建立的,是以在People對象生命周期結束的時候,Eye對象的生命周期也同樣結束了。

無善無惡心之體,

有善有惡意之動,

知善知惡是良知,

為善去惡是格物。