【設計模式】UML類圖及Java的類之間的關系

UML類圖展示

file

設計模式中的對象關系

關聯(lián)和依賴的對比

依賴關系  虛線箭頭

依賴是a類成員方法中有b類的屬性,動物新陳代謝方法中有水和空氣的屬性盾戴,只有調這個方法的時候,才可能臨時用一下

關聯(lián)關系  實線 類與類的連接,(它使一個類知道另一個類的屬性和方法,關聯(lián)關系一般用成員變量實現(xiàn))

關聯(lián)是a類中存在b類對象旦万,企鵝類中有氣候類的屬性

組合和聚合的對比

組合關系  實心菱形

組合有相同的生命周期,鳥有翅膀镶蹋,鳥死了纸型,翅膀不復存在

聚合關系  空心菱形(想象成盤子,盛東西梅忌,盤子的多,另一方少)

大雁群有大雁除破,一直大雁掛了牧氮,大雁群不會消失

繼承和實現(xiàn)的對比

繼承    空心三角形實線

實現(xiàn)    空心三角形虛線

(實現(xiàn)接口有兩種方式,一種是棒棒糖的形式瑰枫,另一種是虛線空心三角形的方式)

代碼實現(xiàn)

依賴

? 依賴關系(Dependency) 是一種使用關系踱葛,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關系光坝。大多數(shù)情況下尸诽,依 賴關系體現(xiàn)在某個類的方法使用另一個類的對象作為參數(shù)。

? 在UML中盯另,依賴關系用帶箭頭的虛線表示性含,由依賴的一方指向被依賴的一方。

file
public class Screwdriver {    //螺絲刀鸳惯,作為人類的工具商蕴,是用來被人類使用的
}
public class Person{
       public void screw(Screwdriver src){    //擰螺絲,需使用螺絲刀
       }
}

依賴關系有如下三種情況:
1芝发、A類是B類中的(某中方法的)局部變量绪商;

2、A類是B類方法當中的一個參數(shù)辅鲸;

3格郁、A類向B類發(fā)送消息,從而影響B(tài)類發(fā)生變化独悴;

關聯(lián)(Association)

是一種結構關系例书,說明一個事物的對象與另一個事物的對象相聯(lián)系。給定有關聯(lián)的兩個類刻炒,可以從一個類的對象得到另一個類的對象雾叭。關聯(lián)有兩元關系和多元關系。兩元關系是指一種一對一的關系落蝙,多元關系是一對多或多對一的關系织狐。兩個類之間的簡單關聯(lián)表示了兩個同等地位類之間的結構關系暂幼。當你想要表示結構化關系時使用關聯(lián)。

? 關聯(lián)關系(Association) 是類與類之間最常用的一種關系移迫,它是一種結構化關系旺嬉,用于表示一類對象與另一類對象之間有聯(lián)系。

? 在UML類圖中厨埋,用實線連接有關聯(lián)的對象所對應的類邪媳,在使用Java、C#和C++等編程語言實現(xiàn)關聯(lián)關系時荡陷,通常將一個類的對象作為另一個類的屬性雨效。

? 在使用類圖表示關聯(lián)關系時可以在關聯(lián)線上標注角色名。

file

分為幾種情況:

雙向關聯(lián)

public class Customer  
{  
    private Product[] products;  
    ……  
}  
public class Product  
{  
    private Customer customer;  
    ……  
}  

單向關聯(lián)

public class Customer  
{  
    private Address address;  
    ……  
}  
  
public class Address  
{  
    ……  
}  

自關聯(lián)

public class Node  
{  
    private Node subNode;  
    ……  
} 

聚合關系(Aggregation)

? 聚合關系(Aggregation) 表示一個整體與部分的關系废赞。通常在定義一個整體類后徽龟,再去分析這個整體類的組成結構,從而找出一些成員類唉地,該整體類和成員類之間就形成了聚合 關系据悔。

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

file
public class Student{
}
public class School{  
       private List<Student> students ;  //學校與學生是聚合關系
}
file

組合關系(Composition)

組合關系(Composition)也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統(tǒng)一的生存期狂秘。一旦整體對象不存在浸赫,部分對象也將不存在,部分對象與整體對象之 間具有同生共死的關系赃绊。

? 在組合關系中既峡,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期碧查,即成員類的存在依賴于整體類运敢。在UML中,組合關系用帶實心菱形的直線表示忠售。

file
public class Menu{
}
public class Window{
       private List<Menu> menus ;
}

菜單的存在前提是窗口的存在传惠,兩者之間存在很強的擁有關系。且窗口對菜單的生命周期負責稻扬,只有在窗口創(chuàng)建之后卦方,菜單才能夠創(chuàng)建,菜單必須在窗口銷毀之前銷毀泰佳。因此Window與Menu之間是組合關系盼砍。

泛化

? 泛化關系(Generalization)也就是繼承關系尘吗,也稱為“is-a-kind-of”關系,泛化關系用于描述父類與子類之間的關系浇坐,父類又稱作基類或超類睬捶,子類又稱作派生類。在UML中近刘,泛 化關系用帶空心三角形的直線來表示擒贸。

? 在代碼實現(xiàn)時,使用面向對象的繼承機制來實現(xiàn)泛化關系觉渴,如在Java語言中使用extends關鍵字介劫、在C++/C#中使用冒號“:”來實現(xiàn)。

file

泛化對應Java中繼承關系案淋,即子類繼承父類中出private修飾外的所有東西(變量座韵、方法等)。示例代碼:

public class Animal {
}
public class Tiger extends Animal {
}

在UML當中哎迄,對泛化關系有三個要求:
1、子類與父類應該完全一致隆圆,父類所具有的屬性漱挚、操作,子類應該都有渺氧;

2旨涝、子類中除了與父類一致的信息以外,還包括額外的信息侣背;

3白华、可以使用父類的實例的地方,也可以使用子類的實例履羞;

實現(xiàn)關系(Implementation)

? 接口之間也可以有與類之間關系類似的繼承關系和依賴關系津函,但是接口和類之間還存在一種實現(xiàn)關系(Realization)宏侍,在這種關系中,類實現(xiàn)了接口管搪,類中的操作實現(xiàn)了接口中所 聲明的操作。在UML中铡买,類與接口之間的實現(xiàn)關系用帶空心三角形的虛線來表示更鲁。

file
public interface Vehicle   
{  
    public void move();  
}  
public class Ship implements Vehicle  
{  
    public void move()   
    {  
    ……  
    }  
}  
public class Car implements Vehicle  
{  
    public void move()   
    {  
    ……  
    }  
}  

總結

關于關聯(lián),聚合奇钞,組合在實現(xiàn)上并沒有顯著區(qū)別澡为,相區(qū)別他們只有通過判斷關系雙方之間的實際關系,如關系強弱景埃、創(chuàng)建與銷毀之間有無必要關聯(lián)等媒至。
它們的強弱關系是沒有異議的:依賴 < 關聯(lián) < 聚合 < 組合<泛化(繼承)

實現(xiàn)方式區(qū)別

(1)依賴關系:關系對象出現(xiàn)在局部變量或者方法的參數(shù)里顶别,或者關系類的靜態(tài)方法被調用

(2) 關聯(lián)關系:關系對象出現(xiàn)在實例變量中

(3) 聚合關系:關系對象出現(xiàn)在實例變量中

(4) 合成關系:關系對象出現(xiàn)在實例變量中

(5) Generalization: extends

(6) 實現(xiàn): implements

參考:

https://www.cnblogs.com/1446358788-qq/tag/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/default.html?page=4

https://blog.csdn.net/lpjishu/article/details/51491779

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市塘慕,隨后出現(xiàn)的幾起案子筋夏,更是在濱河造成了極大的恐慌,老刑警劉巖图呢,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件条篷,死亡現(xiàn)場離奇詭異,居然都是意外死亡蛤织,警方通過查閱死者的電腦和手機赴叹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來指蚜,“玉大人乞巧,你說我怎么就攤上這事√Γ” “怎么了绽媒?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長免猾。 經(jīng)常有香客問我是辕,道長,這世上最難降的妖魔是什么猎提? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任获三,我火速辦了婚禮,結果婚禮上锨苏,老公的妹妹穿的比我還像新娘疙教。我一直安慰自己,他們只是感情好伞租,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布贞谓。 她就那樣靜靜地躺著,像睡著了一般葵诈。 火紅的嫁衣襯著肌膚如雪经宏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天驯击,我揣著相機與錄音烁兰,去河邊找鬼。 笑死徊都,一個胖子當著我的面吹牛沪斟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼主之,長吁一口氣:“原來是場噩夢啊……” “哼择吊!你這毒婦竟也來了?” 一聲冷哼從身側響起槽奕,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤几睛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粤攒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體所森,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年夯接,在試婚紗的時候發(fā)現(xiàn)自己被綠了焕济。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡盔几,死狀恐怖晴弃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逊拍,我是刑警寧澤上鞠,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站芯丧,受9級特大地震影響芍阎,放射性物質發(fā)生泄漏。R本人自食惡果不足惜注整,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一能曾、第九天 我趴在偏房一處隱蔽的房頂上張望肿轨。 院中可真熱鬧蕊程,春花似錦驹暑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钥星。三九已至满着,卻和暖如春编饺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秽誊。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工楣号, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藻懒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓椅亚,卻偏偏與公主長得像呀舔,于是被迫代替她去往敵國和親躯舔。 傳聞我的和親對象是個殘疾皇子丧失,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容