【重點掌握】:設(shè)計模式定義波势、類關(guān)系翎朱、抽象封裝具體、面向超類型編程
【重點掌握】:策略模式的參與角色尺铣、職責(zé)分配拴曲、協(xié)作及代碼實現(xiàn)。
超類型就是抽象類或接口
1迄埃、接口
2疗韵、關(guān)聯(lián):類之間的聯(lián)系兑障,如客戶和訂單侄非,每個訂單對應(yīng)特定的客戶,每個客戶對應(yīng)一些特定的訂單流译,再如籃球隊員與球隊之間的關(guān)聯(lián)
理解:關(guān)聯(lián)(Association)關(guān)系是類與類之間的聯(lián)接逞怨,它使一個類知道另一個類的屬性和方法。關(guān)聯(lián)可以是雙向的福澡,也可以是單向的叠赦。在Java語言中,關(guān)聯(lián)關(guān)系一般使用成員變量來實現(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)系強的關(guān)系算利。
public class Head
{
? ? private Mouth mouth;
? ? public Head()
? ? {
????????mouth = new Mouth();//類Head對象創(chuàng)建時Mouth對象也創(chuàng)建了
? ? }
}
public class Mouth
{
}
2.2聚合:整體與部分之間是可分離的册踩,比如計算機與CPU、公司與員工的關(guān)系等效拭,與關(guān)聯(lián)關(guān)系一樣暂吉,聚合關(guān)系也是通過實例變量實現(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類的定義赴恨,因為Person類引用了Car和House疹娶。與關(guān)聯(lián)不同的是,Person類里并沒有Car和House類型的屬性伦连,Car和House的實例是以參量的方式傳入到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、可以使用父類的實例的地方舵稠,也可以使用子類的實例超升;