23种设计模式之适配器模式(Adapter模式)
轉(zhuǎn)載地址?https://sscloud.net/solution/jsp/article.jsp?articleId=10090
?
?
模式的定義與特點(diǎn)
23種設(shè)計(jì)模式demo下載
適配器模式(Adapter)的定義如下:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。適配器模式分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式兩種,前者類之間的耦合度比后者高,且要求程序員了解現(xiàn)有組件庫中的相關(guān)組件的內(nèi)部結(jié)構(gòu),所以應(yīng)用相對較少些。
該模式的主要優(yōu)點(diǎn)如下。
- 客戶端通過適配器可以透明地調(diào)用目標(biāo)接口。
- 復(fù)用了現(xiàn)存的類,程序員不需要修改原有代碼而重用現(xiàn)有的適配者類。
- 將目標(biāo)類和適配者類解耦,解決了目標(biāo)類和適配者類接口不一致的問題。
其缺點(diǎn)是:對類適配器來說,更換適配器的實(shí)現(xiàn)過程比較復(fù)雜。
模式的結(jié)構(gòu)與實(shí)現(xiàn)
類適配器模式可采用多重繼承方式實(shí)現(xiàn),如?C++?可定義一個(gè)適配器類來同時(shí)繼承當(dāng)前系統(tǒng)的業(yè)務(wù)接口和現(xiàn)有組件庫中已經(jīng)存在的組件接口;Java?不支持多繼承,但可以定義一個(gè)適配器類來實(shí)現(xiàn)當(dāng)前系統(tǒng)的業(yè)務(wù)接口,同時(shí)又繼承現(xiàn)有組件庫中已經(jīng)存在的組件。
對象適配器模式可釆用將現(xiàn)有組件庫中已經(jīng)實(shí)現(xiàn)的組件引入適配器類中,該類同時(shí)實(shí)現(xiàn)當(dāng)前系統(tǒng)的業(yè)務(wù)接口。現(xiàn)在來介紹它們的基本結(jié)構(gòu)。
1. 模式的結(jié)構(gòu)
適配器模式(Adapter)包含以下主要角色。
類適配器模式的結(jié)構(gòu)圖如圖 1 所示。
?
圖1 類適配器模式的結(jié)構(gòu)圖
對象適配器模式的結(jié)構(gòu)圖如圖 2 所示。
?
圖2 對象適配器模式的結(jié)構(gòu)圖
?
模式的應(yīng)用場景
適配器模式(Adapter)通常適用于以下場景。
- 以前開發(fā)的系統(tǒng)存在滿足新系統(tǒng)功能需求的類,但其接口同新系統(tǒng)的接口不一致。
- 使用第三方提供的組件,但組件接口定義和自己要求的接口定義不同。
模式的擴(kuò)展
適配器模式(Adapter)可擴(kuò)展為雙向適配器模式,雙向適配器類既可以把適配者接口轉(zhuǎn)換成目標(biāo)接口,也可以把目標(biāo)接口轉(zhuǎn)換成適配者接口,其結(jié)構(gòu)圖如圖 4 所示。
?
圖4 雙向適配器模式的結(jié)構(gòu)圖
?
模式實(shí)現(xiàn)代碼:
?
/**
?* @author sscloud.net
?* @Date 2019年1月1日下午8:01:07
?* @Fun 適配器:對象適配器、類適配器、接口適配器
?**/
public class Demo {
public static void main(String[] args) {
//對象適配器
DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle());
objAdapter.drawCircle();
objAdapter.drawRectangle(" in DrawAdapter4Object");
//類適配器
DrawAdapter4Class adapter4 = new DrawAdapter4Class();
adapter4.drawCircle();
adapter4.drawRectangle(" in DrawAdapter4Class ");
//接口適配器
MyDrawAdapter adapter = new MyDrawAdapter();
adapter.drawCircle();
adapter.drawRectangle();
}
static class MyDrawAdapter extends DefaultDrawAdapter{
@Override
public void drawCircle() {
// TODO Auto-generated method stub
System.out.println("My DrawAdapter:Draw CirCle");
}
@Override
public void drawRectangle() {
// TODO Auto-generated method stub
super.drawRectangle();
System.out.println("My DrawAdapter:Draw Rectangle");
}
}
}
23種設(shè)計(jì)模式demo下載
?
總結(jié)
以上是生活随笔為你收集整理的23种设计模式之适配器模式(Adapter模式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS(十六)——美化表单实操
- 下一篇: java设计模式——adapter模式