java 類與類之間的關係
java 類與類之間的關係,接上一篇UML展開
勵志就像給自己插上翅膀,才能飛得更高;煉造一雙千里眼,才能望得更遠。滿載而行,即使困難重重,留下的汗水也終會獲得回報;滿載而行,即使艱辛與淚水並存,前方的道路也依然光明;滿載而行,即使跌倒,也將有勇氣邁向成功。
- 泛化/繼承(Generalization)
- 實現(Realization)
- 依賴(Dependency)
- 關聯(Association)
- 聚合(Aggregation)
- 組合(Composition)
型別 | 標識 | 描述 | 效果 |
---|---|---|---|
組合(Composition) | –* | 實線菱形填充箭頭 | |
聚合(Aggregation) | –o | 實線空心菱形箭頭 | |
實現(Realization) | –|> | 實線空心三角箭頭 | |
泛化/繼承(Generalization) | …|> | 虛線三角空心箭頭 | |
關聯(Association) | -> | 實現箭頭 | |
依賴(Dependency) | …> | 虛線箭頭 |
泛化/繼承(Generalization)
泛化不好理解,繼承肯定大家非常熟悉子類繼承父類,父類的方法變數都可以應用的到,父類相當於子類就是’透明’的
public class A {
}
public class B extends A{
}
現在就說B繼承/泛化自A
…|>虛線實心箭頭表示
UML類圖(1.1)
:
實現(Realization)
實現可以簡單的理解就是實現類,什麼才能實現?那肯定是介面了
public interface A {
}
public class B implements A{
}
這裡就稱B是A的實現類
–|>空心實線箭頭表示
UML類圖(1.2)
:
依賴(Dependency)
依賴也非常好理解,2個類之間只要有互動,就稱之為有依賴
public class A { }
public class C {}
public class D {}
public class E {}
public class B {
public A mA;
public C getC(){
return null;
}
public void showD(){
D d = new D();
}
public void setE(E e){
}
}
可以看到在B類()中有4中方式引用了其他的類:
-
public A mA; 成員變數
-
public C getC(){ //返回值
return null;
} -
public void showD(){ //區域性變數 這裡違反了迪米特原則
D d = new D();
} -
public void setE(E e){ //引數構造的方法
}
只要有互動,就稱之為有依賴關係
虛線箭頭表示
UML類圖(1.3)
這裡就可以稱之為B依賴於A,C,D,E
總結:
- 在一個類中,成員變數
- 返回值
- 區域性變數
- 引數傳遞
都稱之為有依賴關係
簡單一句話概括:在這個類中出現其他類,當前類依賴於其他的類
關聯(Association)
依賴關係的特例,實際就是類與類之間的聯絡
關聯關係又分為:
- 單向關聯關係
- 雙向關聯關係
單向關聯關係
public class A{
B b = new B();
}
public class B{
}
上邊也提到了,關聯關係是依賴關係的特例
依賴關係就是指兩個類之間只要有聯絡他就是依賴關係
A類中有B類那麼A類和B類就是單向關聯關係
實現箭頭表示
UML類圖(1.4)
:
public class A{
B b = new B();
}
public class B{
A a = new A();
}
這種A類中包含B類,B類中包含A類的就稱之為有 關聯關係
實現箭頭表示:
UML類圖(1.5)
:
聚合(Composition)
整體和部分可以分開(是關聯關係的特例)
public class A{}
public class B{}
public class C{
A a ;
B b;
public int run(int min,int max){
return min + max;
}
void setA(A a){
this.a = a;
}
void setB(B b){
this.b = b;
}
}
通過程式碼可以看到:
在C類中,有一個run()方法,求的是min + max,在這裡就沒有用到了A類和B類
但是呢C類中吧A類和B類作為全域性(成員)變數
那麼這裡就稱之為A類B類聚合到C類
就好比電腦和滑鼠的關係
電腦可以和滑鼠分離嗎?
當然可以分離
所以也可以稱之為滑鼠聚合到電腦上!
用實心空心菱形表示
UML類圖(1.6)
組合 (Aggregation)
整體與部分不可分離稱之為組合(也是關聯關係的特例)
public class A{}
public class B{
A a = new A();
}
像這種,在B建立的時候A也跟隨建立,無法分離的,就稱之為組合關係
UML類圖(1.7)
:
總的來說,強弱程度依次為:組合>聚合>關聯>依賴
總結:
- 依賴關係:只要兩個類有互動(…>)
- 泛化/繼承關係: 子類繼承父類(…|>)
- 實現關係:介面與實現類的關係(–|>)
- 聚合關係:成員(全域性)變數,沒有直接new,可與整體分割 (–o)
- 組合關係:成員(全域性)變數,直接new,不可與整體分割(–*)
- 關聯關係:依賴關係的特例(–>)
猜你喜歡:
java 七大設計原則之單一職責,介面隔離原則(文字程式碼相結合理解)
java 七大設計原則之依賴倒置,里氏替換原則(文字程式碼相結合理解)
java 七大設計原則之迪米特原則,開閉原則,合成複用原則(文字程式碼相結合理解)
原創不易,記得點贊哦~