java适配器模式火鸡变凤凰是,读《HeadFirst设计模式》笔记之适配器模式
適配器模式:將一個(gè)類的接口,轉(zhuǎn)換成客戶期望的另一個(gè)接口。適配器讓原本接口不兼容的類可以合作無間
一個(gè)圖很信息的說明適配器模式:
? ? ? ? ? ? ? ? ? ??
舉個(gè)栗子:
還記得策略模式中的鴨子嘛!現(xiàn)在有一個(gè)火雞想加入到鴨子的隊(duì)列中。但火雞不會(huì)呱呱的叫,只會(huì)咕咕的叫,能飛,但不能像鴨子(野鴨)飛那么遠(yuǎn)。那么我們就來包裝下吧。
這是火雞的接口
public interface Turkey {
public void gobble();
public void fly();
}
火雞的實(shí)現(xiàn):
public class WildTurkey implements Turkey {
public void gobble() {
System.out.println("Gobble gobble");
}
public void fly() {
System.out.println("i am flying a short distance");
}
}
還記得鴨子的接口嗎?
public interface Duck {
public void quack();
public void fly();
}
顯然火雞的接口和鴨子的接口不匹配,所以我們來做一個(gè)適配器吧!
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
// 包裝叫聲,符合鴨子接口
public void quack() {
turkey.gobble();
}
// 包裝飛行,飛5次,追上鴨子的飛行距離
public void fly() {
for (int i = 0; i < 5; i++) {
turkey.fly
}
}
}
我們開始使用這個(gè)鴨子了:
public class DuckTestDrive() {
WildTurkey turkey = new WildTurkey();
// 火雞偽裝鴨子
Duck turkeyAdapter = new TurkeyAdapter(turkey);
turkeyAdapter.quack();
turkeyAdapter.fly();
}
火雞成功偽裝成鴨子了!那么為什么火雞要偽裝成鴨子呢?
不想改變?cè)械膬蓚€(gè)接口,又想讓兩個(gè)接口合作,那么就用適配器實(shí)現(xiàn)兩個(gè)接口的對(duì)接
適配器模式和裝飾者模式區(qū)別:適配器將一個(gè)對(duì)象包裝起來以改變其接口;裝飾者將一個(gè)對(duì)象包裝起來以增加新的行為和責(zé)任
總結(jié)
以上是生活随笔為你收集整理的java适配器模式火鸡变凤凰是,读《HeadFirst设计模式》笔记之适配器模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后Kubernetes时代的微服务
- 下一篇: php中update语句修改多个字段,M