適配器模式
設(shè)么是適配器模式
它屬于結(jié)構(gòu)型模式,主要用于將一個(gè)類的接口轉(zhuǎn)換成客戶端所期望的另一種接口,從而使得原本由于接口不兼容而無法協(xié)同工作的類能夠一起工作。
適配器模式主要解決的是不兼容接口的問題。在軟件開發(fā)中,經(jīng)常會(huì)有這樣的情況:我們有一個(gè)現(xiàn)有的類,它的接口(方法、屬性等)不符合我們的需求,但我們又無法直接修改這個(gè)類(可能是因?yàn)樗堑谌綆斓囊徊糠?,或者出于其他原因)。此時(shí),我們可以使用適配器模式來“包裝”這個(gè)類,使其具有我們期望的接口。
適配器模式的主要形式
- 類適配器模式:通過多重繼承的方式,適配器類繼承自目標(biāo)接口和適配者類。由于Java不支持多重繼承(除了接口),因此在實(shí)際應(yīng)用中,我們通常會(huì)使用對(duì)象組合的方式來實(shí)現(xiàn)類適配器模式的效果。
- 對(duì)象適配器模式:適配器類持有適配者類的一個(gè)實(shí)例,并實(shí)現(xiàn)了目標(biāo)接口。當(dāng)客戶端調(diào)用目標(biāo)接口的方法時(shí),適配器類會(huì)調(diào)用適配者類的相應(yīng)方法。
適配器模式的優(yōu)點(diǎn)包括:
適配器模式特點(diǎn)
- 提高了類的復(fù)用性:通過適配器,我們可以復(fù)用那些原本不兼容的類。
- 增加了靈活性:適配器模式使得代碼更加靈活,我們可以很容易地更換適配者類,而不需要修改客戶端代碼。
- 遵循了“開閉原則”:適配器模式對(duì)修改關(guān)閉,對(duì)擴(kuò)展開放。我們可以通過添加新的適配器類來支持新的適配者類,而不需要修改現(xiàn)有的代碼。
然而,適配器模式也有其局限性。例如,如果適配者類的接口與目標(biāo)接口的差別太大,那么適配器類的實(shí)現(xiàn)可能會(huì)變得非常復(fù)雜和難以維護(hù)。此外,如果過度使用適配器模式,可能會(huì)導(dǎo)致系統(tǒng)結(jié)構(gòu)變得復(fù)雜和混亂。
類適配器
UML
- Adaptee(適配者鍵盤)具有打印功能,但是由于是接口并不適用。
- Target(目標(biāo)接口)目標(biāo)接口需要通過USB插入
- Adapter(適配器)實(shí)現(xiàn)目標(biāo)接口,重新輸出方法(通過繼承調(diào)用適配者輸出方法)
- 測(cè)試時(shí),通過創(chuàng)建適配者Adapter調(diào)用目標(biāo)接口方法即可實(shí)現(xiàn)調(diào)用Adaptee(適配者)相應(yīng)方法
實(shí)現(xiàn)代碼
Adaptee.java
// 這是需要被適配的類,它可能有一個(gè)不兼容的接口。
// 比如:不兼容USB接口的舊鍵盤
public class Adaptee {
public void print(){
System.out.println("鍵盤輸出");
}
}
Target.java
// 這是我們期望得到的接口??蛻舳酸槍?duì)這個(gè)接口編程,而不需要知道具體的實(shí)現(xiàn)細(xì)節(jié)
// 筆記本:USB接口
public interface Target {
void handlePrint();
}
Adapter.java
// 類適配器
// 適配器:這是適配器模式的核心。適配器類實(shí)現(xiàn)了目標(biāo)接口,并在內(nèi)部持有適配者類的一個(gè)實(shí)例。
// 當(dāng)客戶端調(diào)用目標(biāo)接口的方法時(shí),適配器類會(huì)將調(diào)用委托給適配者類的相應(yīng)方法(可能需要經(jīng)過一些轉(zhuǎn)換)。
public class Adapter extends Adaptee implements Target{
@Override
public void handlePrint() {
super.print();
}
}
TestClient.java
public class TestClient {
public static void main(String[] args) {
// 創(chuàng)建適配器
Adapter adapter = new Adapter();
// 測(cè)試
adapter.handlePrint();
}
}
執(zhí)行結(jié)果
對(duì)象適配器模式
UML
該模式只需要修改Adapter(適配器),將繼承改為對(duì)象組合。將Adapter屬性設(shè)置為Adaptee,通過Adaptee調(diào)用其方法
Adapter.java
// 對(duì)象適配器模式
// 適配器:這是適配器模式的核心。適配器類實(shí)現(xiàn)了目標(biāo)接口,并在內(nèi)部持有適配者類的一個(gè)實(shí)例。
//當(dāng)客戶端調(diào)用目標(biāo)接口的方法時(shí),適配器類會(huì)將調(diào)用委托給適配者類的相應(yīng)方法(可能需要經(jīng)過一些轉(zhuǎn)換)。
public class Adapter implements Target {
private Adaptee adaptee;
@Override
public void handlePrint() {
adaptee.print();
}
}
執(zhí)行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-845504.html
gitee源碼
git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git文章來源地址http://www.zghlxwxcb.cn/news/detail-845504.html
到了這里,關(guān)于03-JAVA設(shè)計(jì)模式-適配器模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!