組合也是關聯關系的一種特例,它展現的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合;它同樣展現整體與部分間的關系,但此時整體與部分是不可分的,它們具有統一的生存期,整體的生命周期結束也就意味着部分的生命周期結束,部分對象與整體對象之間具有同生共死的關系,組合關系中的部分,是不能在整體之間進行共享的。比如人和眼睛,當然,有人會說現在醫學發達,眼睛可以移植給别人,如果是這樣的話,你可以了解人和眼睛的關系為聚合,這都是在具體的場景下來确定的。表現在代碼層面,和關聯關系是一緻的,隻能從語義級别來區分。
在組合關系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。 在UML中,組合關系用帶實心菱形的直線表示。
UML示例圖如下所示:
示例代碼如下: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對象的生命周期也同樣結束了。
無善無惡心之體,
有善有惡意之動,
知善知惡是良知,
為善去惡是格物。