具體概念待學(xué)習(xí)
以下四種圖示比較容易混淆
依賴(Dependency)
--------> 虛線箭頭表示
依賴關(guān)系是一種使用關(guān)系,某事物的改變有可能會影響到使用該事物的其他事物试幽。
通過三種方式來實(shí)現(xiàn):
- 最常見的是將一個類的對象作為另一個類中方法的參數(shù)
- 在一個類的方法中將另一個類的對象作為局部變量
- 在一個類的方法中調(diào)用另一個類的靜態(tài)方法
方式一舉例 駕駛員開車
public class Driver {
public void drive(Car car) {
car.move();
}
}
public class Car {
public void move() {
...
}
}
聚合(Aggregation)
<>——> 空心菱形+實(shí)線箭頭表示
表示整體和部分的關(guān)系萨脑。成員對象是整體對象的一部分隐轩,但是成員對象可以脫離整體對象獨(dú)立存在。
實(shí)現(xiàn)方式:成員對象通常作為構(gòu)造方法渤早、Setter方法或業(yè)務(wù)方法的參數(shù)注入到整體對象中职车。
與關(guān)聯(lián)區(qū)別:
關(guān)聯(lián)不是整體和部分的區(qū)別,所以一般不會作為構(gòu)造方法參數(shù)傳入。ps:自己的理解
與組合的區(qū)別:
成員對象可以獨(dú)立存在悴灵,組合通常直接在構(gòu)造方法中直接實(shí)例化成員類
例子一 汽車與引擎
public class Car {
private Engine engine;
// 構(gòu)造注入
public Car(Engine engine) {
this.engine = engine;
}
// 設(shè)值注入
public void setEngine(Engine engine) {
this.engine = engine;
}
...
}
public class Engine {
...
}
例子二 雁群與大雁
public class GooseGroup {
private Goose[] gooseArray;
public GooseGroup(gooseArray) {
this.gooseArray = gooseArray;
}
public void flyInVFormation() { // V形飛行
...
}
...
}
public class Goose {
...
}
組合/合成(composition)
◆——> 實(shí)心菱形+實(shí)線箭頭
也表示整體與部分的關(guān)系扛芽。但是整體對象可以控制成員對像的生命周期,兩者同生共死积瞒。
實(shí)現(xiàn)方式川尖,在整體類的構(gòu)造方法中直接實(shí)例化成員類
例子一:頭與嘴
public class Head {
private Mouth mouth;
public Head() {
mouth = new Mouth();
}
...
}
public class Mouth {
...
}
例子二:鳥與翅膀
public class Bird {
private Wing wing;
public Bird() {
wing = new Wing();
...
}
}
public class Wing {
...
}
關(guān)聯(lián)(association)
——> 實(shí)線箭頭表示
通常將一個類的對象作為另一個類的成員變量
比如表單里包含一個按鈕
public class LoginForm {
private JButton loginButton; // 定義為成員變量
...
}
public class JButton {
...
}
雙向關(guān)聯(lián) 比如顧客購買商品并擁有商品,反之茫孔,賣出的商品總有某個顧客與之關(guān)聯(lián)
public class Customer {
private Product[] products;
...
}
public class Product {
private Customer customer;
}