1. 說明
- 1.Adapter(適配器)。
- 2.將一個類的接口轉換成客戶希望的另外一個接口。
- 3.Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
- 4.類適配器使用多重繼承對一個接口與另一個接口進行匹配。
- 5.對象適配器依賴于對象組合。
- 6.適配器模式是一種非常實用的設計模式,它能夠幫助我們解決接口不兼容的問題,提高系統(tǒng)的靈活性和可擴展性。
2. 應用場景
- 1.舊接口適配新接口:當系統(tǒng)中的一個類需要使用另一個類的接口,但這兩個類的接口不兼容時,可以使用適配器模式。
- 2.多個類的接口統(tǒng)一:當系統(tǒng)中的多個類的接口不統(tǒng)一時,可以使用適配器模式將它們的接口統(tǒng)一成一個接口,從而提高系統(tǒng)的靈活性和可擴展性。
- 3.封裝有缺陷的接口設計:如果某個類的接口設計存在缺陷或不符合標準規(guī)范,可以使用適配器模式進行封裝,使其更符合客戶端的使用習慣或需求。
3. 結構圖
- 1.類適配器結構圖
- 2.對象適配器結構圖
4. 構成
- 1.目標接口(Target Interface):定義客戶端所期望使用的與特定領域相關的接口方法。
- 2.適配器(Adapter):適配器類實現目標接口,并持有一個適配者對象。適配器通過調用適配者對象的方法,將其轉換為目標接口方法。適配器可以是類適配器(通過繼承實現)或對象適配器(通過組合實現)。
- 3.適配者(Adaptee):已經存在的類或接口,提供了特定的功能,但與目標接口不兼容,這個接口需要適配。
- 4.客戶端(Client):使用目標接口進行操作的類或對象。
5. 優(yōu)缺點
5.1 優(yōu)點
- 1.提高兼容性:能夠解決接口不兼容的問題,使得原本不兼容的類能夠協同工作。
- 2.靈活性:通過使用適配器,客戶端代碼可以獨立于不兼容的接口進行編寫,從而提高了系統(tǒng)的靈活性。當需要更換或修改被適配的類時,只需要修改適配器即可,而不需要修改客戶端代碼。
- 3.擴展性:適配器模式可以輕松地添加新的適配器來支持新的接口,這使得系統(tǒng)更易于擴展。
- 4.復用性:適配器可以復用現有的功能,通過轉換接口來適應新的環(huán)境或需求,提高了代碼的復用性。
5.2 缺點
- 1.增加復雜性:引入適配器模式可能會增加系統(tǒng)的復雜性,因為需要編寫額外的適配器代碼。這可能會使得系統(tǒng)的理解和維護變得更加困難。
- 2.性能損耗:適配器模式在轉換接口的過程中可能會引入一些性能損耗,尤其是在處理大量數據時。這是因為適配器需要在客戶端和被適配類之間進行額外的轉換操作。
- 3.可能產生過多的適配器:如果系統(tǒng)中存在大量的不兼容接口,那么可能需要編寫大量的適配器來解決這些問題。這可能會導致系統(tǒng)中存在過多的適配器類,使得系統(tǒng)結構變得復雜。
6. 適用性
- 1.想使用一個已經存在的類,而它的接口不符合要求。
- 2.想創(chuàng)建一個可以服用的類,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定兼容的類)協同工作。
- 3.(僅適用于對象 Adapter)想使用一個已經存在的子類,但是不可能對每一個都進行子類化以匹配它們的接口。對象適配器可以適配它的父類接口。
7. java示例
7.1 類適配器模式
- 1.老打印機類
package com.learning.adapter.class_adapter;
/**
* 舊打印機類,有老舊的打印方法
*/
public class OldPrinter {
public void printOld(String content){
System.out.println("舊打印機打印內容:" + content);
}
}
- 2.打印接口
package com.learning.adapter.class_adapter;
/**
* 打印接口
*/
public interface Printable {
void print(String content);
}
- 3.新系統(tǒng)
package com.learning.adapter.class_adapter;
/**
* 新系統(tǒng)
*/
public class NewSystem {
private Printable printer;
public NewSystem(Printable printer){
this.printer = printer;
}
public void printDocument(String content){
printer.print(content);
}
}
- 4.舊打印機適配器類
package com.learning.adapter.class_adapter;
/**
* 舊打印機適配器類
*/
public class OldPrinterAdapter extends OldPrinter implements Printable{
@Override
public void print(String content){
// 調用舊打印機的打印方法
printOld(content);
}
}
- 5.客戶端類
package com.learning.adapter.class_adapter;
/**
* 客戶端類
*/
public class Client {
public static void main(String[] args) {
NewSystem newSystem = new NewSystem(new OldPrinterAdapter());
newSystem.printDocument("Hello World!");
}
}
- 6.示例截圖
7.2 對象適配器模式
- 1.舊打印機適配器類
package com.learning.adapter.object_adapter;
/**
* 舊打印機適配器類
*/
public class OldPrinterAdapter implements Printable {
private OldPrinter oldPrinter;
public OldPrinterAdapter(OldPrinter oldPrinter){
this.oldPrinter = oldPrinter;
}
@Override
public void print(String content){
// 調用舊打印機的打印方法
oldPrinter.printOld(content);
}
}
- 2.客戶端類
package com.learning.adapter.object_adapter;
/**
* 客戶端類
*/
public class Client {
public static void main(String[] args) {
NewSystem newSystem = new NewSystem(new OldPrinterAdapter(new OldPrinter()));
newSystem.printDocument("Hello World!");
}
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-855490.html
文章來源:http://www.zghlxwxcb.cn/news/detail-855490.html
到了這里,關于【軟考】設計模式之適配器模式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!