UML類圖是學(xué)習(xí)設(shè)計(jì)模式之前必會(huì)必學(xué)的知識(shí)點(diǎn)裕便,學(xué)習(xí)設(shè)計(jì)模式會(huì)涉及到大量的類結(jié)構(gòu),寫(xiě)這篇文章的同時(shí)也是在記錄自己在學(xué)習(xí)設(shè)計(jì)模式的過(guò)程中遇到的一些問(wèn)題,大家來(lái)一起參考一下吧班挖。
首先看一下類圖概念,簡(jiǎn)單來(lái)說(shuō)就是更加直觀的看一個(gè)類的結(jié)構(gòu)芯砸,按照國(guó)際慣例類圖就是采用UML的方式表示萧芙。
類圖(Class diagram)是顯示了模型的靜態(tài)結(jié)構(gòu),特別是模型中存在的類假丧、類的內(nèi)部結(jié)構(gòu)以及它們與其他類的關(guān)系等双揪。類圖不顯示暫時(shí)性的信息。類圖是面向?qū)ο蠼5闹饕M成部分包帚。它既用于應(yīng)用程序的系統(tǒng)分類的一般概念建模渔期,也用于詳細(xì)建模,將模型轉(zhuǎn)換成編程代碼渴邦。
下面引用一個(gè)常用UML類圖圖示樣例:
基本概念:
矩形框代表一個(gè)類的結(jié)構(gòu)(Class)疯趟,類圖分為三層:
第一層代表類名,若是抽象類類名用斜體表示谋梭。
第二層代表特性信峻,也就是字段或者屬性。
第三層代表操作瓮床,也就是方法或行為盹舞。
其中,符號(hào)表示訪問(wèn)權(quán)限:‘+’表示public隘庄,‘-’表示private踢步,‘#’表示protected。類與類之間的符號(hào)代表兩個(gè)類的關(guān)系峭沦。
類之間的關(guān)系:
類與類一共有如下幾種關(guān)系:繼承(Generalization)贾虽、實(shí)現(xiàn)(Realization)、依賴(Dependence)吼鱼、關(guān)聯(lián)(Association)蓬豁、聚合(Aggregation)、組合(Composition)菇肃。
1地粪、繼承關(guān)系
繼承關(guān)系中,子類繼承父類的所有特征和行為琐谤◇〖迹看到類圖中的動(dòng)物類和鳥(niǎo)類,鳥(niǎo)類是一種動(dòng)物,兩者是繼承的關(guān)系质礼。UML類圖表示如下:
繼承關(guān)系用三角形+實(shí)線表示旺聚,方向從子類指向父類。
在Java語(yǔ)言中眶蕉,extends關(guān)鍵字代表繼承砰粹,簡(jiǎn)單得按照這個(gè)類圖寫(xiě)一下代碼吧:
public class Animal {
public int lives;
public void breeding(){
if (lives > 0){
System.out.println("我要繁殖啦~");
}
}
}
public class Bird extends Animal {
public String feather;
public void layEggs(){
System.out.println("下蛋方法");
}
}
2、實(shí)現(xiàn)關(guān)系
實(shí)現(xiàn)是類與接口的一種關(guān)系造挽,類實(shí)現(xiàn)接口的所有特征與行為碱璃。看到大雁類和飛翔接口的位置饭入,接口有interface標(biāo)識(shí)嵌器,它們之間的是實(shí)現(xiàn)關(guān)系,類必須實(shí)現(xiàn)接口中的所有方法谐丢。因此大雁類具有"飛()"方法爽航。類圖如下:
實(shí)現(xiàn)關(guān)系用三角形+虛線表示,方向從類指向接口庇谆。
implements關(guān)鍵字代表實(shí)現(xiàn)岳掐,簡(jiǎn)簡(jiǎn)單單過(guò)一下代碼:
public interface Fly {
public void flyaway(); //飛翔接口
}
public class WildGoose extends Bird implements Fly{
@Override
public void flyaway() {
System.out.println("大雁飛翔了");
}
@Override
public void layEggs() {
super.layEggs();
System.out.println("大雁下蛋了");
}
}
3凭疮、依賴關(guān)系
依賴關(guān)系是一種弱的使用的關(guān)系, 即一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助饭耳。在類圖中,動(dòng)物依賴于水和空氣才能生存执解,這是依賴關(guān)系的一個(gè)例子寞肖,類圖表示如下:
依賴關(guān)系用箭頭+虛線表示,方向從依賴類指向被依賴類衰腌。
代碼體現(xiàn)在局部變量新蟆、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用中。補(bǔ)充一下剛才動(dòng)物類的方法:
public class Oxygen {
@Override
public String toString() {
return "氧氣濃度:21%";
}
}
public class Water {
@Override
public String toString() {
return "100ml的水";
}
}
public class Animal {
public int lives;
public void breeding() {
if (lives > 0) {
System.out.println("我要繁殖啦~");
}
}
//新方法右蕊,新陳代謝
public void metabolism(Oxygen o, Water w) {
System.out.println("新陳代謝需要" + o.toString() + "和" + w.toString());
}
}
4、關(guān)聯(lián)關(guān)系
關(guān)聯(lián)關(guān)系比較常見(jiàn),是一種強(qiáng)的宾濒、穩(wěn)定的宠进、持久的關(guān)系, 它使一個(gè)類知道另一個(gè)類的屬性和方法。例子中表示為企鵝‘知道’氣候的變化萝风。
關(guān)聯(lián)關(guān)系用箭頭+實(shí)線表示嘀掸。方向從關(guān)聯(lián)類指向被關(guān)聯(lián)類。
代碼體現(xiàn)在成員變量中规惰,繼續(xù)寫(xiě)一下代碼吧:
public class Climate {
}
public class Penguin extends Bird{
private Climate climate;
}
5睬塌、聚合關(guān)系
聚合關(guān)系表示部分與整體的一種弱的擁有關(guān)系,體現(xiàn)的是A對(duì)象可以包含B對(duì)象,但B對(duì)象不是A對(duì)象的一部分揩晴。根據(jù)圖例就可以理解為雁群包含了每一只大雁勋陪,但大雁離開(kāi)雁群還是可以獨(dú)立存在的,所以大雁不是雁群的一部分硫兰。
聚合關(guān)系用空心菱形+實(shí)線箭頭表示粥鞋,菱形頂端為整體。
代碼體現(xiàn)在成員變量中瞄崇,繼續(xù)擼一下代碼呻粹,簡(jiǎn)單寫(xiě)了下邏輯:
public class WideGooseAggregate {
private WildGoose[] arrayWideGoose = new WildGoose[3];
public WideGooseAggregate(){
arrayWideGoose[0] = new WildGoose();
arrayWideGoose[1] = new WildGoose();
arrayWideGoose[2] = new WildGoose();
}
public void vFly() {
System.out.println("V型飛行");
for (WildGoose wGoose : arrayWideGoose) {
wGoose.flyaway();
}
}
public void hFly() {
System.out.println("一型飛行");
for (WildGoose wGoose : arrayWideGoose) {
wGoose.flyaway();
}
}
}
6、組合關(guān)系
組合關(guān)系表示部分與整體的一種強(qiáng)的擁有關(guān)系苏研,體現(xiàn)為嚴(yán)格的部分和整體關(guān)系等浊,部分和整體的生命周期一樣。根據(jù)例子摹蘑,翅膀與鳥(niǎo)就是組合的關(guān)系筹燕。翅膀是鳥(niǎo)的一部分,翅膀脫離了鳥(niǎo)就不能獨(dú)立存在衅鹿。
組合關(guān)系用實(shí)心菱形+實(shí)線箭頭表示撒踪,菱形頂端為整體。
代碼體現(xiàn)在成員變量中大渤,再改一下剛才鳥(niǎo)類的代碼吧:
public class Bird extends Animal {
public String feather;
private Wings wings; //翅膀
public Bird(){
//翅膀與鳥(niǎo)的生命周期一樣
wings = new Wings();
}
public void layEggs(){
System.out.println("下蛋方法");
}
}
總結(jié)
在理解性記憶的同時(shí)制妄,允許我再啰嗦一下:
繼承:三角形+實(shí)線
實(shí)現(xiàn):三角形+虛線
依賴:箭頭+虛線
關(guān)聯(lián):箭頭+實(shí)線
聚合:空心菱形+實(shí)線箭頭
組合:實(shí)心菱形+實(shí)線箭頭
此文章主要從記住類圖長(zhǎng)什么樣子和代碼應(yīng)該怎么寫(xiě)的角度去寫(xiě),歡迎大家討論泵三。
轉(zhuǎn)載請(qǐng)注明出處喔:http://www.reibang.com/p/fcb642ff3be5
推薦閱讀
基礎(chǔ)篇:
設(shè)計(jì)模式前篇之——UML類圖必會(huì)知識(shí)點(diǎn)
設(shè)計(jì)模式前篇之——一起過(guò)一下面向?qū)ο蟮母拍?/a>
創(chuàng)建型模式:
簡(jiǎn)易理解設(shè)計(jì)模式之:簡(jiǎn)單工廠模式——來(lái)試試接入支付功能
簡(jiǎn)易理解設(shè)計(jì)模式之:工廠方法模式——數(shù)據(jù)存儲(chǔ)例子
簡(jiǎn)易理解設(shè)計(jì)模式之:抽象工廠模式——更換數(shù)據(jù)庫(kù)例子
簡(jiǎn)易理解設(shè)計(jì)模式之:建造者模式——學(xué)習(xí)使用“鏈?zhǔn)秸{(diào)用”
簡(jiǎn)易理解設(shè)計(jì)模式之:原型模式——深耕捞、淺拷貝的概念
簡(jiǎn)易理解設(shè)計(jì)模式之:?jiǎn)卫J健獑卫J降膸追N常用寫(xiě)法
結(jié)構(gòu)型模式:
簡(jiǎn)易理解設(shè)計(jì)模式之:適配器模式——Android列表視圖控件設(shè)計(jì)方式
簡(jiǎn)易理解設(shè)計(jì)模式之:橋接模式——穿衣服經(jīng)典案例2
簡(jiǎn)易理解設(shè)計(jì)模式之:組合模式——實(shí)現(xiàn)View中的樹(shù)狀結(jié)構(gòu)
簡(jiǎn)易理解設(shè)計(jì)模式之:裝飾模式——穿衣服經(jīng)典案例
簡(jiǎn)易理解設(shè)計(jì)模式之:外觀模式——第三方SDK的幫助類
簡(jiǎn)易理解設(shè)計(jì)模式之:享元模式——五子棋游戲例子
簡(jiǎn)易理解設(shè)計(jì)模式之:代理模式——iOS視圖控件設(shè)計(jì)方式
行為型模式:
簡(jiǎn)易理解設(shè)計(jì)模式之:策略模式——優(yōu)化一下支付功能
簡(jiǎn)易理解設(shè)計(jì)模式之:模板方法模式——Android中的BaseActivity基類
簡(jiǎn)易理解設(shè)計(jì)模式之:觀察者模式——監(jiān)聽(tīng)與回調(diào)
簡(jiǎn)易理解設(shè)計(jì)模式之:狀態(tài)模式——優(yōu)化登錄操作
簡(jiǎn)易理解設(shè)計(jì)模式之:備忘錄模式——Word文檔的工作原理
簡(jiǎn)易理解設(shè)計(jì)模式之:迭代器模式——遍歷對(duì)象的好幫手
簡(jiǎn)易理解設(shè)計(jì)模式之:命令模式——實(shí)現(xiàn)命令的參數(shù)化配置
簡(jiǎn)易理解設(shè)計(jì)模式之:責(zé)任鏈模式——OA中請(qǐng)假流程示例
簡(jiǎn)易理解設(shè)計(jì)模式之:中介者模式——多人聊天室例子
簡(jiǎn)易理解設(shè)計(jì)模式之:解釋器模式——語(yǔ)言和文法
簡(jiǎn)易理解設(shè)計(jì)模式之:訪問(wèn)者模式——員工考核例子