大話設計模式——UML類圖

首先上總圖:
在這裏插入圖片描述
首先看“動物”的矩形框,它代表一個類(Class)。類圖分爲三層,第一層顯示類的名稱,如果是抽象類,則用斜體顯示。第二層是類的特性,通常是字段和屬性。第三層是類的操作,通常是方法或行爲。注意前面的符號,“+”表示 public,“-”表示 private,“#”表示 protected。
在這裏插入圖片描述
然後看左下角“飛翔”,它表示一個接口圖(這裏和原書中有些出入,我用的是PowerDesigner),第一行是接口名稱,有一個類似棒棒糖的標識,第二行是接口的屬性。第三行是接口的方法。書中“講人話”接口是“棒棒糖表示法”本人在 pd 中沒找到畫法。
在這裏插入圖片描述

public interface IFly
{
    void Fly();
}

public interface ILanguage
{
    void Speak();
}

下面看類與類、類與接口之間的關係。首先看動物、鳥、鴨、唐老鴨之間的關係,他們都是繼承的關係,繼承關係用空心三角形 + 實線來表示
在這裏插入圖片描述

public class Bird : Animal
{
}

其中大雁是能飛的,實現了飛翔接口。實現接口用空心三角形 + 虛線來表示
在這裏插入圖片描述

public class WideGoose : IFly
{
    public void Fly()
    {
    }
}

然後看企鵝和氣候的兩個類,企鵝是很特別的鳥,會遊不會飛。更重要的是,它與氣候有很大的關聯,每年會進行長途跋涉。企鵝需要“知道”氣候的變化,需要“瞭解”氣候的規律。當一個類“知道”另一個類時,可以用關聯(association)。關聯關係用實線箭頭來表示
在這裏插入圖片描述

public class Penguin : Bird
{
    // 在企鵝 Penguin 中引用到氣候 Climate 對象
    private Climate climate;
}

再來看大雁和雁羣這兩個類,大雁是羣居動物,每隻大雁都屬於一個雁羣,一個雁羣可以有多隻大雁。所以它們之間就滿足聚合(Aggregation)關係。聚合表示一種弱“擁有”關係,體現的是 A 對象可以包含 B 對象,但 B 對象不是 A 對象的一部分聚合關係用空心的菱形 + 實線箭頭來表示
在這裏插入圖片描述

public class WideGooseAggregate
{
    // 在雁羣 WideGooseAggregate 類中,有大雁數組對象 arrayWideGeese
    public WideGoose[] arrayWideGeese;
}

合成(Composition,組合)是一種強的“擁有關係”,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣。在鳥和其翅膀就是合成(組合)關係,因爲它們是部分和整體的關係,並且翅膀和鳥的生命週期是相同的。合成關係用實心的菱形 + 實線箭頭來表示。合成關係的連線兩端有一個數字“1”和數字“2”,這被稱爲基數,表明這一端的類可以有幾個實例,一個鳥應該有兩隻翅膀。如果一個類可能有無數個實例,則就用“n”來表示。關聯關係、聚合關係也可以有基數。
在這裏插入圖片描述

public class Bird
{
    private Wing wing;
    public Bird()
    {
        // 在鳥 Bird 類中,初始化時,實例化翅膀 Wing,他們之間同時生成
        wing = new Wing();
    }
}

動物幾大特徵,如有新陳代謝、能繁殖,而動物要有生命力需要氧氣、水以及食物等。也就是說,動物依賴於氧氣和水,他們之間是依賴關係(Dependency),用虛線箭頭表示
在這裏插入圖片描述

public abstract class Animal
{
    public void Metabolism(Oxygen oxygen, Water water)
    {
    }
}

大佬總結:編程是一門技術,更加是一門藝術。不能滿足於寫完代碼運行結果正確就完事,時常考慮如何讓代碼更加簡練,更加容易維護,容易擴展和複用,只有這樣纔可以真正得到提高。寫出優雅的代碼真正是一種很爽的事情。

以上文章內容整理自程傑的《大話設計模式》,以上內容爲學習進行的歸納和記錄,有興趣的小夥伴可以買這本書閱讀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章