貿(mào)易公司寮步網(wǎng)站建設(shè)極致發(fā)燒百度在線入口
目錄
- 1. 依賴
- 2. 關(guān)聯(lián)
- 3. 聚合
- 4. 組合
Java的對象/類之間有四種關(guān)系:依賴、關(guān)聯(lián)、組合、聚合。
1. 依賴
依賴(Dependency): 一個對象的功能依賴于另一個對象。
-
類比:人類生存依賴食物和空氣
-
體現(xiàn):被依賴者體現(xiàn)為依賴者的局部變量、參數(shù)、靜態(tài)方法的調(diào)用
-
示例:
UML:
code:public class Human {public void live(Food food) {Air.breath();food.eat();} }class Air {public static void breath() {System.out.println("呼吸...");} }class Food {public void eat() {System.out.println("進食...");} }
2. 關(guān)聯(lián)
關(guān)聯(lián)(Association): 一個類需要知道另一個類的情況(屬性、方法),可以是雙向,也可以是單向。
-
類比:人類進食需要知道食物有沒有過期
-
體現(xiàn):關(guān)聯(lián)的對象一般是作為成員變量
-
示例:
UML:
code:public class Human {private Food food;public void judge() throws ParseException {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");if (format.parse(food.getExpiration()).compareTo(new Date()) > 0 ) {food.eat();} else {System.out.println("食物已經(jīng)過期");}}public Human(Food food) {this.food = food;} }class Food {private String expiration;public void eat() {System.out.println("食物安全,可以食用");}public Food() {this.expiration = "2023-04";}public String getExpiration() {return expiration;} }
3. 聚合
聚合(Aggregation): 一種強關(guān)聯(lián)關(guān)系(has-a),關(guān)聯(lián)(Association)的對象是同一層級的,而聚合(aggregation)則是整體與組成個體之間的關(guān)系。不同整體之間可以共享個體,比如說氫分子也由氫原子組成。
-
類比:水分子由氫原子和氧原子組成
-
體現(xiàn):被聚合對象作為成員變量
-
實例:
UML:
code:public class WaterMolecule {private HydrogenAtom2 hydrogenAtom2;private OxygenAtom atom;public WaterMolecule(HydrogenAtom2 hydrogenAtom2, OxygenAtom atom) {this.hydrogenAtom2 = hydrogenAtom2;this.atom = atom;} }class OxygenAtom {}class HydrogenAtom2 {}
4. 組合
組合(Compostion): 比聚合更強的關(guān)聯(lián)關(guān)系(is-a),組合關(guān)系要求聚合關(guān)系中代表整體的對象要負責(zé)代表個體/部分的對象的整個生命周期,所以組合關(guān)系不能共享。如果代表整體的對象被銷毀或破壞,那么代表個體的對象也一定會被銷毀或破壞。
-
類比:人和人的心臟、大腦
-
體現(xiàn):個體對象作為成員變量
-
實例:
UML:
code:public class Human {private Brain brain;private Heart heart;private String status;public void sustainLife() {brain.control(status);heart.beat(status);}public Human(Brain brain, Heart heart, String status) {this.brain = brain;this.heart = heart;this.status = status;} }class Brain {public void control(String status) {if (status.equals("0")) {System.out.println("腦死亡");} else {System.out.println("大腦控制身體");}} }class Heart {public void beat(String status) {if (status.equals("0")) {System.out.println("心跳停止");} else {System.out.println("心臟跳動");}} }