相傳八陣圖是諸葛亮創(chuàng)設(shè)的一種陣法,變化萬端,深不可測,可擋十萬精兵。UML雖然沒有那么出神入化,但其重要性是毋庸置疑的,特別是作為一種OO的描述語言。而在這里開始的設(shè)計模式,我將把UML提升到一個重要的高度,如何判斷你是否熟練掌握了設(shè)計模式呢?我猜想有兩點:
- 給你一種設(shè)計模式的UML描述,你能立即認出此為何種設(shè)計模式,并且精確理解其適用的場景。觀UML,如觀代碼。
- 給你一個需求,你能分解出對象,以及對象之間的關(guān)系,并且挑選出合適的設(shè)計模式,并明確其適用的場景。
對于初學者來說,只要達到觀設(shè)計模式的UML圖,如觀OO代碼就可以了,其他方面的經(jīng)驗都是對業(yè)務(wù)邏輯的理解,這個就在對象以及UML之外了,看你對生活的理解是否深刻,而非UML描述的應(yīng)用是否熟練了。
下面介紹一下UML中類與類之間的關(guān)系,以及最終反映到具體代碼中是什么樣子的。
假設(shè)有兩個類A和B,接口C,將六大關(guān)系闡述如下(個人理解,定有不嚴謹之處)
A依賴于B: A類的某個成員方法調(diào)用的參數(shù)中包含B類的實例。
A繼承于B: 這自不必說了。
A實現(xiàn)接口C:這個也不必說了。
A關(guān)聯(lián)B:A類的某個成員變量的類型為B。
A與B是組合關(guān)系: A在邏輯上由B組成,當然也可能還有其他的組成部分,B可以是A組成部分之一,A中可能有1個或者一組B類型的成員變量。當然AB既然是組合關(guān)系,那么也是屬于關(guān)聯(lián)的范疇的。
A與B是聚合關(guān)系: A在邏輯上有多個B組成,這里是除了B沒有其他的部件是A的部件。A的成員變量中包含B類型的聚合。
以上是對類與類,類與接口的六大關(guān)系的通俗闡述。下面需要大家記住每種關(guān)系的UML符號:
聚合 (Aggregation):
關(guān)聯(lián)(Association):

組合(Composition):

繼承(generalization):

實現(xiàn)接口(realization):

依賴(Dependency):
