一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

設(shè)計模式中類的關(guān)系

 哈飛揚 2013-06-25

     在java以及其他的面向?qū)ο笤O(shè)計模式中,類與類之間主要有6種關(guān)系,他們分別是:依賴、關(guān)聯(lián)、聚合、組合、繼承、實現(xiàn)。他們的耦合度依次增強。

1. 依賴(Dependence)

        依賴關(guān)系的定義為:對于兩個相對獨立的對象,當(dāng)一個對象負(fù)責(zé)構(gòu)造另一個對象的實例,或者依賴另一個對象的服務(wù)時,這兩個對象之間主要體現(xiàn)為依賴關(guān)系。定義比較晦澀難懂,但在java中的表現(xiàn)還是比較直觀的:類A當(dāng)中使用了類B,其中類B是作為類A的方法參數(shù)、方法中的局部變量、或者靜態(tài)方法調(diào)用。類上面的圖例中:People類依賴于Book類和Food類,Book類和Food類是作為類中方法的參數(shù)形式出現(xiàn)在People類中的。

代碼樣例:

  1. public class People{  
  2.     //Book作為read方法的形參   
  3.      public void read(Book book){  
  4.         System.out.println(“讀的書是”+book.getName());  
  5.     }  
  6. }  

2.關(guān)聯(lián)(Association)、

單向關(guān)聯(lián):

 

雙向關(guān)聯(lián):

        對于兩個相對獨立的對象,當(dāng)一個對象的實例與另一個對象的一些特定實例存在固定的對應(yīng)關(guān)系時,這兩個對象之間為關(guān)聯(lián)關(guān)系。關(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作為成員變量;同時類B中也使用了類A作為成員變量。

代碼樣例:

  1. public class Son{  
  2.    //關(guān)聯(lián)關(guān)系中作為成員變量的類一般會在類中賦值   
  3.     Father father = new Father();  
  4.     public void getGift(){  
  5.         System.out.println(“從”+father.getName()+”獲得禮物”);  
  6.     }  
  7. }  
  8.   
  9. public class Father{  
  10.     Son son = new Son();  
  11.     public void giveGift(){  
  12.         System.out.println(“送給”+son.getName()+“禮物”);  
  13.     }  
  14. }  

3.聚合(Aggregation)

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

代碼樣例:

  1. public class People{  
  2.     Car car;  
  3.     House house;   
  4.     //聚合關(guān)系中作為成員變量的類一般使用set方法賦值   
  5.      public void setCar(Car car){  
  6.         This.car = car;  
  7.     }  
  8.     public void setHouse(House house){  
  9.         This.house = house;  
  10.     }  
  11.   
  12.     public void driver(){  
  13.         System.out.println(“車的型號:”+car.getType());  
  14.     }  
  15.     public void sleep(){  
  16.         System.out.println(“我在房子里睡覺:”+house.getAddress());  
  17.     }  
  18. }  

4.組合(Composition)

        相比于聚合,組合是一種耦合度更強的關(guān)聯(lián)關(guān)系。存在組合關(guān)系的類表示“整體-部分”的關(guān)聯(lián)關(guān)系,“整體”負(fù)責(zé)“部分”的生命周期,他們之間是共生共死的;并且“部分”單獨存在時沒有任何意義。在下圖的例子中,People與Soul、Body之間是組合關(guān)系,當(dāng)人的生命周期開始時,必須同時有靈魂和肉體;當(dāng)人的生命周期結(jié)束時,靈魂肉體隨之消亡;無論是靈魂還是肉體,都不能單獨存在,他們必須作為人的組成部分存在。

  1. Public class People{  
  2.     Soul soul;  
  3.     Body body;   
  4.     //組合關(guān)系中的成員變量一般會在構(gòu)造方法中賦值   
  5.      Public People(Soul soul, Body body){   
  6.         This.soul = soul;  
  7.         This.body = body;  
  8.     }  
  9.   
  10.     Public void study(){  
  11.         System.out.println(“學(xué)習(xí)要用靈魂”+soul.getName());  
  12.     }  
  13.     Public void eat(){  
  14.         System.out.println(“吃飯用身體:”+body.getName());  
  15.     }  
  16. }  

5.繼承(Generalization)

        繼承表示類與類(或者接口與接口)之間的父子關(guān)系。在java中,用關(guān)鍵字extends表示繼承關(guān)系。UML圖例中,繼承關(guān)系用實線+空心箭頭表示,箭頭指向父類。

6.實現(xiàn)(Implementation)

         表示一個類實現(xiàn)一個或多個接口的方法。接口定義好操作的集合,由實現(xiàn)類去完成接口的具體操作。在java中使用implements表示。UML圖例中,實現(xiàn)關(guān)系用虛線+空心箭頭表示,箭頭指向接口。

        在java中繼承使用extends關(guān)鍵字,實現(xiàn)使用implements關(guān)鍵字,很直觀。就不代碼演示了。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本东京热视频一区二区三区| 欧美日韩国产黑人一区| 日韩精品一区二区毛片| 国产精品十八禁亚洲黄污免费观看 | 中文字幕亚洲在线一区| 国产日韩欧美综合视频| 国产精品一区日韩欧美| 手机在线不卡国产视频| 微拍一区二区三区福利| 小黄片大全欧美一区二区| 日本不卡在线一区二区三区| 国产美女网红精品演绎| 国产又粗又黄又爽又硬的| 中文字幕佐山爱一区二区免费| 亚洲国产日韩欧美三级| av免费视屏在线观看| 国产在线不卡中文字幕| 亚洲av又爽又色又色| 国产美女网红精品演绎| 久久一区内射污污内射亚洲| 日韩女优视频国产一区| 欧美日韩免费观看视频| 国产欧美日韩在线一区二区| 日韩黄片大全免费在线看| 久久99国产精品果冻传媒| 国产精品欧美日韩中文字幕| 午夜久久精品福利视频| 很黄很污在线免费观看| 国产肥女老熟女激情视频一区| 国产水滴盗摄一区二区| 精产国品一二三区麻豆| 亚洲第一区二区三区女厕偷拍| 欧美加勒比一区二区三区| 中文字幕在线区中文色| 欧美日韩精品久久第一页| 日本精品啪啪一区二区三区| 国产精品午夜福利免费在线| 成人免费观看视频免费| 亚洲综合一区二区三区在线| 国产偷拍盗摄一区二区| 欧美成人免费一级特黄|