【重點(diǎn)掌握】:設(shè)計(jì)模式定義、類關(guān)系、抽象封裝具體、面向超類型編程
【重點(diǎn)掌握】:策略模式的參與角色、職責(zé)分配、協(xié)作及代碼實(shí)現(xiàn)。
超類型就是抽象類或接口
1、接口

2、關(guān)聯(lián):類之間的聯(lián)系,如客戶和訂單,每個訂單對應(yīng)特定的客戶,每個客戶對應(yīng)一些特定的訂單,再如籃球隊(duì)員與球隊(duì)之間的關(guān)聯(lián)
理解:關(guān)聯(lián)(Association)關(guān)系是類與類之間的聯(lián)接,它使一個類知道另一個類的屬性和方法。關(guān)聯(lián)可以是雙向的,也可以是單向的。在Java語言中,關(guān)聯(lián)關(guān)系一般使用成員變量來實(shí)現(xiàn)。

關(guān)聯(lián)分為組合和聚合
Public class A {
????Private B b;//從這行代碼顯示A關(guān)聯(lián)B,但不能決定是組合還是聚合關(guān)系,
}
2.1組合:整體與部分間的關(guān)系,不可分的,比如人和人的大腦,比聚合關(guān)系強(qiáng)的關(guān)系。

public class Head
{
? ? private Mouth mouth;
? ? public Head()
? ? {
????????mouth = new Mouth();//類Head對象創(chuàng)建時Mouth對象也創(chuàng)建了
? ? }
}
public class Mouth
{
}
2.2聚合:整體與部分之間是可分離的,比如計(jì)算機(jī)與CPU、公司與員工的關(guān)系等,與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過實(shí)例變量實(shí)現(xiàn)的。但是關(guān)聯(lián)關(guān)系所涉及的兩個類是處在同一層次上的,而在聚合關(guān)系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分。

Public class A {
????Private B b; //注意這有定義類B在類A中的私有變量
????Public set(B b){
????????This.b=b;}
}
//從這行代碼顯示A類對象創(chuàng)建時,B類對象沒有創(chuàng)建,類比組裝主板A和其上的網(wǎng)卡B,兩者可以分拆,換一個新的網(wǎng)卡。
Main(){
????A a = new A();
????a.set(new B());
}
3.依賴:以類A依賴類B為例,表示類B出現(xiàn)在類A的一個方法中的參數(shù)中、方法體局部變量、或靜態(tài)B方法調(diào)用、返回值。
理解:依賴(Dependency)關(guān)系是類與類之間的聯(lián)接。依賴關(guān)系表示一個類依賴于另一個類的定義。例如,一個人(Person)可以買車(car)和房子(House),Person類依賴于Car類和House類的定義,因?yàn)镻erson類引用了Car和House。與關(guān)聯(lián)不同的是,Person類里并沒有Car和House類型的屬性,Car和House的實(shí)例是以參量的方式傳入到buy()方法中去的。一般而言,依賴關(guān)系在Java語言中體現(xiàn)為局域變量、方法的形參,或者對靜態(tài)方法的調(diào)用。

public class Driver {
????public void drive(Car car) {
????????car.move();
????}
}
public class Car {
????public void move() {
? ? ? ?}
}
4.?泛化關(guān)系(Generalization)也就是繼承關(guān)系
1、子類與父類應(yīng)該完全一致,父類所具有的屬性、操作,子類應(yīng)該都有;
2、子類中除了與父類一致的信息以外,還包括額外的信息;
3、可以使用父類的實(shí)例的地方,也可以使用子類的實(shí)例;