天天看點

11.聚合(Aggregation)

      聚合關系是關聯關系的一種特例,它展現的是整體與部分的關系,即has-a的關系,此時整體與部分之間是可分離的,它們可以具有各自的生命周期。比如計算機與CPU、公司與員工的關系等。表現在代碼層面,和關聯關系是一緻的,隻能從語義級别來區分。

      在聚合關系中,成員類是整體類的一部分,即成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。在UML中,聚合關系用帶空心菱形的直線表示。

      UML示例圖如下所示:

11.聚合(Aggregation)

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

class Computer
{
    var centralProcessingUnit: CentralProcessingUnit;
    
    init(cpu: CentralProcessingUnit?)
    {
        centralProcessingUnit = cpu!;
    }
    
    deinit
    {
        print("Computer deinit");
    }
}

var centralProcessingUnit: CentralProcessingUnit? = CentralProcessingUnit();
var computer: Computer? = Computer(cpu: centralProcessingUnit);

// computer生命周期結束
computer = nil;

//centralProcessingUnit還可以進行其他操作.....

//centralProcessingUnit生命周期結束
centralProcessingUnit = nil;      

      從調用代碼我們可以看到,我們建立了一個獨立的centralProcessingUnit對象,然後将這個對象傳入了Computer的init函數。當computer對象生命周期結束的時候,centralProcessingUnit對象如果還有其他指向它的引用,是可以繼續存在的。也就是說,它們的生命周期是相對獨立的。

無善無惡心之體,

有善有惡意之動,

知善知惡是良知,

為善去惡是格物。