1:適配器模式
一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作
類適配器模式
適配的類的API轉(zhuǎn)換成為目標類的API搞疗,使用繼承關(guān)系嗤朴,新增接口的方式來適配
對象適配器模式
不同是使用委派關(guān)系娱仔,適配器的構(gòu)造方法中傳入對象的方式來適配沐飘,
建議使用對象適配器模式
Android中的Listview和BaseAdapter的關(guān)mListview.setAdapter(mAdapter)就是對象適配器模式
缺省適配模式
不準備實現(xiàn)一個接口的所有方法時,就可以使用“缺省適配模式”制造一個抽象類,給出所有方法的平庸的具體實現(xiàn)耐朴。這樣抽象類再繼承下去的子類就不必實現(xiàn)所有的方法了借卧。
Android中基類BaseActivity經(jīng)常有initView(),initEvent()筛峭,initData()铐刘,但是有的頁面不需要都去實現(xiàn)三個方法,可以使用缺省適配一下影晓,保證一些頁面不必實現(xiàn)所有方法镰吵!
參考:
《JAVA與模式》之適配器模式
2:合成模式(組合模式)
使用面向?qū)ο蟮乃枷雭? 統(tǒng)一抽象了容器和葉子的公共抽象組件,然后對整體進行遞歸組合實現(xiàn)樹形結(jié)構(gòu)的構(gòu)建與處理
組合模式可以清楚地定義分層次的復(fù)雜對象挂签,表示對象的全部或部分層次疤祭,它讓客戶端忽略了層次的差異,方便對整個層次結(jié)構(gòu)進行控制饵婆。
在組合模式中增加新的容器構(gòu)件和葉子構(gòu)件都很方便勺馆,無須對現(xiàn)有類庫進行任何修改,符合“開閉原則”侨核。
透明式合成模式的結(jié)構(gòu)與安全式合成模式不同的是草穆,公共抽象構(gòu)建的不同,包括了容器和葉子全部方法的是透明搓译,而容器和葉子還需單獨構(gòu)建的是安全模式悲柱。
適用場景
在以下情況下可以考慮使用組合模式:
(1) 在具有整體和部分的層次結(jié)構(gòu)中,希望通過一種方式忽略整體與部分的差異侥衬,客戶端可以一致地對待它們。
(2) 在一個使用面向?qū)ο笳Z言開發(fā)的系統(tǒng)中需要處理一個樹形結(jié)構(gòu)跑芳。
(3) 在一個系統(tǒng)中能夠分離出葉子對象和容器對象轴总,而且它們的類型不固定,需要增加一些新的類型博个。
參考: java設(shè)計模式之組合模式 不錯
3: 裝飾模式(包裝模式)
動態(tài)地給一個對象添加一些額外的職責(zé)
例如:Decorator裝飾類中怀樟,動態(tài)實現(xiàn)了對象的功能職責(zé)
public abstract class Decorator implements Person {
protected Person person;
public void setPerson(Person person) {
this.person = person;
}
public void eat() {
person.eat();
}
}
實例化的裝飾A,在對象原來功能下super.eat()盆佣,動態(tài)增加了新的功能reEat()
public class ManDecoratorA extends Decorator {
public void eat() {
super.eat();
reEat();
System.out.println("ManDecoratorA類");
}
public void reEat() {
System.out.println("再吃一頓飯");
}
}
參考:
java模式—裝飾者模式
裝飾和繼承的區(qū)別:
裝飾模式可以提供比繼承更多的靈活性往堡。裝飾模式允許系統(tǒng)動態(tài)決定“貼上”一個需要的“裝飾”,或者除掉一個不需要的“裝飾”共耍。繼承關(guān)系則不同虑灰,繼承關(guān)系是靜態(tài)的,它在系統(tǒng)運行前就決定了
缺點:比使用繼承關(guān)系更多的對象痹兜。更多的對象會使得查錯變得困難穆咐,特別是這些對象看上去都很相像
透明性的要求
對的
TheGreatestSage sage = new Monkey();
TheGreatestSage bird = new Bird(sage);
錯的
Monkey sage = new Monkey();
Bird bird = new Bird(sage);
半透明的裝飾模式
在增強性能的時候,往往需要建立新的公開的方法。導(dǎo)致了大多數(shù)的裝飾模式的實現(xiàn)都是“半透明”的对湃,而不是完全透明的崖叫。換言之,允許裝飾模式改變接口拍柒,增加新的方法心傀。
裝飾模式的用意是在不改變接口的前提下,增強所考慮的類的性能
半透明的裝飾模式是介于裝飾模式和適配器模式之間的拆讯。適配器模式的用意是改變所考慮的類的接口脂男,也可以通過改寫一個或幾個方法,或增加新的方法來增強或改變所考慮的類的功能往果。大多數(shù)的裝飾模式實際上是半透明的裝飾模式疆液,這樣的裝飾模式也稱做半裝飾、半適配器模式陕贮。
對象的適配器模式中也是構(gòu)造方法中傳入對象堕油,對象委派方法實現(xiàn),不同的是適配器不改變功能
參考: 《JAVA與模式》之裝飾模式 很棒