成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

設(shè)計(jì)模式之UML類圖

xiao7cn / 1479人閱讀

摘要:因?yàn)橐蕾囮P(guān)系不強(qiáng)制,所以用虛線表示關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系是類屬性依賴,很關(guān)鍵,所以使用實(shí)線表示。源碼地址類圖參考慕課網(wǎng)設(shè)計(jì)模式精講大話設(shè)計(jì)模式設(shè)計(jì)模式之類圖學(xué)習(xí)二類圖

類圖(Class diagram)主要用于描述系統(tǒng)的結(jié)構(gòu)化設(shè)計(jì)。類圖也是最常用的UML圖,用類圖可以顯示出類、接口以及它們之間的靜態(tài)結(jié)構(gòu)和關(guān)系。
0x01.類圖中的元素 1.類 Class / 接口 Interface

第一格:表示類的名字,抽象類用斜體表示,接口在前面加

第二格:表示類的屬性,前面符號表示作用于,冒號后面表示類的類型

符號 解釋
+ public
- private
# protected
~ default
下面有橫線 表示static靜態(tài)屬性

第三格:表示類的行為,同上

符號 解釋
+-#~ 同上
斜體 抽象方法
下面有橫線 表示static靜態(tài)方法
:String :后表示返回值,返回String字符串類型
無: 表示void無返回
2.UML類圖中各個(gè)類的關(guān)系

a).依賴關(guān)系

依賴關(guān)系的定義為:對于兩個(gè)相對獨(dú)立的對象,當(dāng)一個(gè)對象負(fù)責(zé)構(gòu)造另一個(gè)對象的實(shí)例,或者依賴另一個(gè)對象的服務(wù)時(shí),這兩個(gè)對象之間主要體現(xiàn)為依賴關(guān)系。

可以簡單的理解為:類 A 使用到了類 B,而這種使用關(guān)系具有偶然性,臨時(shí)性,非常弱的,但是 B 類中的變化會(huì)影響到類 A,比如某個(gè)學(xué)生要用筆寫字,學(xué)生與筆的關(guān)系就是一種依賴關(guān)系,如果筆沒水了,那學(xué)生就不能寫字了(B 類的變化會(huì)影響類 A) 或者換另一只筆繼續(xù)寫字(臨時(shí)性體現(xiàn))。

使用虛線和箭頭,箭頭指向被依賴的對象

UML圖示

例如上面圖中:動(dòng)物的新陳代謝依賴氧氣

/**
 * 動(dòng)物類
 */
public class Animal {

    /**
     * 生命
     */
    public String life;

    /**
     * 新陳代謝
     * @param oxygen 氧氣
     * @param water 水
     */
    public void metabolism(Oxygen oxygen, Water water) {

    }

    public void multiply () {

    }
}
/**
 * 水
 */
public class Water {}

/**
 * 氧氣
 */
public class Oxygen {}
b).泛化繼承關(guān)系

繼承表示類與類 (或者接口與接口) 之間的父子關(guān)系。在 Java 中,用關(guān)鍵字 extends 表示繼承關(guān)系。

空心箭頭實(shí)線,箭頭方向是子類指向父類來表示,只有知道對方信息才能指向?qū)Ψ?/p>

UML圖示

如圖所示:鳥類屬于動(dòng)物類(鳥是動(dòng)物),所以鳥繼承自動(dòng)物。繼承了動(dòng)物的新陳代謝和繁衍,同時(shí)也有自己的屬性(翅膀)、行為(生蛋)。

public class Animal {
    /**
     * 生命
     */
    public String life;

    /**
     * 新陳代謝
     * @param oxygen 氧氣
     * @param water 水
     */
    public void metabolism(Oxygen oxygen, Water water) {

    }

    public void multiply () {

    }
}
/**
 * 鳥
 */
public class Bird extends Animal {
    /**
     * 羽毛
     */
    public String plume;

    /**
     * 兩個(gè)翅膀
     */
    public List wings;

    /**
     * 生蛋
     */
    public void rawEgg () {

    }
}
c).組合關(guān)系

組合是一種耦合度更強(qiáng)的關(guān)聯(lián)關(guān)系。存在組合關(guān)系的類表示“整體-部分”的關(guān)聯(lián)關(guān)系,“整體”負(fù)責(zé)“部分”的生命周期,他們之間是共生共死的;并且“部分”多帶帶存在時(shí)沒有任何意義。

使用實(shí)心菱形和大于箭頭表示,實(shí)線說明耦合性更強(qiáng)。組合關(guān)系可以在兩側(cè)寫上數(shù)字,表示數(shù)量對應(yīng)關(guān)系。組合關(guān)系對象擁有同樣的生命周期。

UML圖示

如圖所示:一只鳥有兩個(gè)翅膀,失去了鳥,翅膀也沒有存在的意義,所以鳥和翅膀是共同的生命周期。

/**
 * 鳥
 */
public class Bird extends Animal {

    /**
     * 羽毛
     */
    public String plume;

    /**
     * 兩個(gè)翅膀
     */
    public List wings;

    /**
     * 生蛋
     */
    public void rawEgg () {

    }
}
/**
 * 翅膀
 */
public class Wing {}
d).關(guān)聯(lián)關(guān)系

關(guān)聯(lián)關(guān)系的定義為:對于兩個(gè)相對獨(dú)立的對象,當(dāng)一個(gè)對象的實(shí)例與另一個(gè)對象的一些特定實(shí)例存在固定的對應(yīng)關(guān)系時(shí),這兩個(gè)對象之間為關(guān)聯(lián)關(guān)系。

它體現(xiàn)的兩個(gè)類中一種強(qiáng)依賴關(guān)系,比如我和我的朋友,這種關(guān)系比依賴更強(qiáng),不存在依賴關(guān)系中的偶然性,關(guān)系也不是臨時(shí)的,一般是長期性的。

關(guān)聯(lián)關(guān)系分為單向關(guān)聯(lián)和雙向關(guān)聯(lián):

在 Java 中,單向關(guān)聯(lián)表現(xiàn)為:類 A 當(dāng)中使用了 類 B,其中類 B 是作為類 A 的成員變量。

雙向關(guān)聯(lián)表現(xiàn)為: 類 A 當(dāng)中使用類 B 作為成員變量,同時(shí)類 B 中也使用了類 A 作為成員變量。

表示一個(gè)類和另外一個(gè)類是有關(guān)聯(lián)的,一般有一個(gè)屬性是另一個(gè)類,用實(shí)線和大于箭頭,指向被關(guān)聯(lián)對象,使用實(shí)線說明依賴性比較強(qiáng)。

UML圖示

如圖所示:企鵝的生存依賴氣候的變化。

/**
 * 企鵝
 */
public class Penguin extends Bird {

    //氣候
    public Climate climate;

    public Climate getClimate() {
        return climate;
    }

    public void setClimate(Climate climate) {
        this.climate = climate;
    }
}
/**
 * 氣候
 */
public class Climate {}
e).聚合關(guān)系

聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,耦合度強(qiáng)于關(guān)聯(lián),他們的代碼表現(xiàn)是相同的,僅僅是在語義上有所區(qū)別:關(guān)聯(lián)關(guān)系的對象間是相互獨(dú)立的,而聚合關(guān)系的對象之間存在著包容關(guān)系,他們之間是“整體-個(gè)體”的相互關(guān)系。

整體和局部的關(guān)系,兩者擁有獨(dú)立的生命周期,是has-a的關(guān)系。

聚合關(guān)系中作為成員變量的類一般使用 set 方法賦值。

使用空心菱形和大于箭頭表示,菱形指向聚合方,箭頭指向個(gè)體??招牧庑问强梢苑艝|西的盤子,可以用來裝東西,東西放在盤子里就可以裝進(jìn)去。

UML類圖表示

如圖所示:大雁群中有很多只大雁,大眼群有獨(dú)立的行為(一字飛行,V字飛行)

/**
 * 大雁群
 */
public class BigWildGooseGroup {

    public List bigWildGooses;


    public void oneFly() {
        System.out.println("一字飛行");
    }

    public void vfly() {
        System.out.println("V字飛行");
    }

    public List getBigWildGooses() {
        return bigWildGooses;
    }

    public void setBigWildGooses(List bigWildGooses) {
        this.bigWildGooses = bigWildGooses;
    }
}
/**
 * 大雁
 */
public class BigWildGoose extends Bird implements IFly{
    @Override
    public void fly() {}
}
f).實(shí)現(xiàn)關(guān)系

表示一個(gè)類實(shí)現(xiàn)一個(gè)或多個(gè)接口的方法。接口定義好操作的集合,由實(shí)現(xiàn)類去完成接口的具體操作, 在 Java 中使用 implements 表示。在 Java 中,如果實(shí)現(xiàn)了某個(gè)接口,那么就必須實(shí)現(xiàn)接口中所有的方法。

使用空心三角和虛線表示,箭頭指向接口。實(shí)線關(guān)系對類的耦合比較弱,所以使用虛線表示。

一般使用接口定義抽象行為。比如鳥具有飛行的行為!

UML表示

如圖所示:大雁實(shí)現(xiàn)了飛行接口,擁有了飛行行為。

/**
 * 大雁
 */
public class BigWildGoose extends Bird implements IFly{
    @Override
    public void fly() {}
}
/**
 * 飛行接口
 */
public interface IFly {
    void fly();
}

接口的其他表示方法:棒棒糖表示法

0x02.相似關(guān)系比較 1.依賴關(guān)系和關(guān)聯(lián)關(guān)系

依賴關(guān)系:一般使應(yīng)用實(shí)現(xiàn)在方法上,如果不調(diào)用方法使不需要使用的。因?yàn)橐蕾囮P(guān)系不強(qiáng)制,所以用虛線表示!

關(guān)聯(lián)關(guān)系:關(guān)聯(lián)關(guān)系是類屬性依賴,很關(guān)鍵,所以使用實(shí)線表示。

2.聚合關(guān)系和組合關(guān)系,空心和實(shí)心菱形

數(shù)量少方向的是菱形箭頭。

聚合是一個(gè)盤子可以稱很多東西,但是他們是相同的,只是數(shù)量不同,不同的生命周期。是一組事物形成了一個(gè)新的整體,具有獨(dú)立的生命周期與行為。

組合的生命周期是相同的。

3.繼承和實(shí)現(xiàn)

繼承:是類和類之間的關(guān)系,所以用實(shí)線。

實(shí)現(xiàn):限制的不明顯,只限制了行為,所以用虛線。

只有知道對方信息,才可以被指向,所以箭頭的方向都是指向父類或接口。

0x04.源碼地址

uml類圖: https://github.com/sigmako/design-pattern/tree/master/uml

0x05.參考

慕課網(wǎng)設(shè)計(jì)模式精講: https://coding.imooc.com/class/270.html

大話設(shè)計(jì)模式: https://book.douban.com/subject/2334288/

設(shè)計(jì)模式之 UML 類圖: https://zhuanlan.zhihu.com/p/24576502

UML學(xué)習(xí)(二)-----類圖: https://www.cnblogs.com/silent2012/archive/2011/09/07/2169946.html

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74644.html

相關(guān)文章

  • 從零開始單排學(xué)設(shè)計(jì)模式UML類圖」定級賽

    摘要:從零開始單排學(xué)設(shè)計(jì)模式的國服排位之旅,今天正式開啟目前段位定級賽這篇文章來總結(jié)下類圖,本來不打算講類圖的,因?yàn)槲以趯W(xué)習(xí)設(shè)計(jì)模式的時(shí)候,一遇到有關(guān)的就會(huì)自動(dòng)忽略,一看感覺就很復(fù)雜。關(guān)聯(lián)關(guān)系用實(shí)現(xiàn)箭頭來表示。 閱讀本文大概需要 3.5 分鐘。 本篇是設(shè)計(jì)模式系列的開篇,雖然之前也寫過相應(yīng)的文章,但是因?yàn)榉N種原因后來斷掉了,而且發(fā)現(xiàn)之前寫的內(nèi)容也很渣,不夠系統(tǒng)。 所以現(xiàn)在打算重寫,加上距離現(xiàn)...

    Loong_T 評論0 收藏0
  • UML 及 StarUml

    摘要:類之間的關(guān)系關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系是類與類之間最常用的一種關(guān)系,它是一種結(jié)構(gòu)化關(guān)系,用于表示一個(gè)類對象與另一個(gè)類對象之間有聯(lián)系。自關(guān)聯(lián)在系統(tǒng)中可能會(huì)存在一些類的屬性對象類型為該類本身,這種特殊的關(guān)聯(lián)關(guān)系稱為自關(guān)聯(lián)。 UML UML:統(tǒng)一建模語言(Unified Modeling Language)。在 UML 系統(tǒng)開發(fā)中有三個(gè)主要的模型: 功能模型:從用戶的角度展示系統(tǒng)的功能,包括用例圖...

    NikoManiac 評論0 收藏0
  • Python自動(dòng)繪制UML圖、函數(shù)調(diào)用圖(Call Graph)

    摘要:借助,自動(dòng)提取代碼的動(dòng)態(tài)調(diào)用流程圖。繪制類圖安裝是一個(gè)開源圖形可視化軟件。循環(huán)曲線表示遞歸過程調(diào)用。繪制的常用工具有靜態(tài)調(diào)用圖等。包括模塊之間的調(diào)用流程函數(shù)調(diào)用次數(shù)及耗時(shí)等。 ...

    widuu 評論0 收藏0
  • JS設(shè)計(jì)模式學(xué)習(xí)_基礎(chǔ)篇

    摘要:工廠模式單例模式結(jié)構(gòu)型設(shè)計(jì)模式關(guān)注于如何將類或?qū)ο蠼M合成更大更復(fù)雜的結(jié)構(gòu),以簡化設(shè)計(jì)。 一、寫在前面 設(shè)計(jì)模式的定義:在面向?qū)ο筌浖O(shè)計(jì)過程中針對特定問題的簡潔而優(yōu)雅的解決方案 當(dāng)然我們可以用一個(gè)通俗的說法:設(shè)計(jì)模式是解決某個(gè)特定場景下對某種問題的解決方案。因此,當(dāng)我們遇到合適的場景時(shí),我們可能會(huì)條件反射一樣自然而然想到符合這種場景的設(shè)計(jì)模式。 比如,當(dāng)系統(tǒng)中某個(gè)接口的結(jié)構(gòu)已經(jīng)無法滿足...

    venmos 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<