23種設(shè)計(jì)模式之適配器模式(Adapter Pattern)
基本概念
適配器模式(Adapter Pattern)屬于結(jié)構(gòu)型設(shè)計(jì)模式,它的作用是將一個(gè)類(lèi)的接口轉(zhuǎn)換成客戶(hù)希望的另外一個(gè)接口。適配器讓原本由于接口不兼容而不能一起工作的類(lèi)可以協(xié)同工作。
結(jié)構(gòu)組成
配器模式包括三個(gè)角色:目標(biāo)抽象類(lèi)(Target)、適配器類(lèi)(Adapter)和被適配者類(lèi)(Adaptee)
- 目標(biāo)抽象類(lèi)(Target):定義了客戶(hù)端使用的與特定領(lǐng)域相關(guān)的接口,也就是客戶(hù)端需要的方法。
- 適配器類(lèi)(Adapter):通過(guò)繼承或者組合方式,將被適配者類(lèi)的接口與目標(biāo)抽象類(lèi)的接口轉(zhuǎn)換起來(lái),使得客戶(hù)端可以按照目標(biāo)抽象類(lèi)的接口進(jìn)行操作。
- 被適配者類(lèi)(Adaptee):已經(jīng)存在的、功能穩(wěn)定的類(lèi),在這里指的是需要適配的類(lèi)。
兩種實(shí)現(xiàn)方式
-
類(lèi)適配器模式:通過(guò)繼承來(lái)實(shí)現(xiàn)適配器功能;
-
對(duì)象適配器模式:通過(guò)組合來(lái)實(shí)現(xiàn)適配器功能。
適配器模式在實(shí)際開(kāi)發(fā)中非常常見(jiàn),比如我們經(jīng)常需要連接各種不同的數(shù)據(jù)庫(kù),每種數(shù)據(jù)庫(kù)都有自己獨(dú)特的接口和方法。
如果我們希望寫(xiě)出一段通用的代碼,能夠連接到任何一種數(shù)據(jù)庫(kù)并執(zhí)行相同的操作,那么適配器模式就非常適合解決這個(gè)問(wèn)題。
小栗子
類(lèi)適配器模式
我們實(shí)現(xiàn)將220V電壓轉(zhuǎn)換成5V電壓的功能。
目標(biāo)接口
/**
* @Classname Voltage5V
* @Description TODO 目標(biāo)接口
* @Date 2023/7/25 09:05
* @Created by wangxianlin
*/
public interface Voltage5V {
int output5V();
}
源接口
/**
* @Classname Voltage220V
* @Description TODO 源接口
* @Date 2023/7/25 09:05
* @Created by wangxianlin
*/
public class Voltage220V {
public int output220V() {
return 220;
}
}
適配器類(lèi)
/**
* @Classname VoltageAdapter
* @Description TODO 適配器類(lèi)
* @Date 2023/7/25 09:06
* @Created by wangxianlin
*/
public class VoltageAdapter extends Voltage220V implements Voltage5V{
@Override
public int output5V() {
int src = output220V();
System.out.println("原始電壓:" + src + "V");
int dst = src / 44; // 將220V電壓轉(zhuǎn)換成5V電壓
System.out.println("轉(zhuǎn)換后電壓:" + dst + "V");
return dst;
}
}
客戶(hù)端代碼
/**
* @Classname Client
* @Description TODO 客戶(hù)端代碼
* @Date 2023/7/25 09:06
* @Created by wangxianlin
*/
public class Client {
public static void main(String[] args) {
Voltage5V adapter = new VoltageAdapter();
int output5V = adapter.output5V();
System.out.println("輸出電壓:" + output5V + "V");
}
}
原始電壓:220V
轉(zhuǎn)換后電壓:5V
輸出電壓:5V
在上面的示例代碼中,我們首先定義了目標(biāo)接口Voltage5V和源接口Voltage220V,其中Voltage220V代表原始的220V電壓。
對(duì)象適配器模式
介紹:
- (1)基本思路和類(lèi)的適配器模式相同,只是將Adapter類(lèi)作修改,不是繼承src而是持有src類(lèi)的實(shí)例,以解決兼容性的問(wèn)題。
- (2)根據(jù) “合成復(fù)用原則” ,在系統(tǒng)中盡量使用關(guān)聯(lián)關(guān)系來(lái)替代繼承關(guān)系。
適配器類(lèi)
/**
* @Classname VoltageAdapter
* @Description TODO 對(duì)象適配器模式-適配器類(lèi)
* @Date 2023/7/25 09:06
* @Created by wangxianlin
*/
public class VoltageAdapterNew implements Voltage5V{
private Voltage220V voltage220V;
public VoltageAdapterNew(Voltage220V voltage220V) {
super();
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
int src = voltage220V.output220V();
System.out.println("原始電壓:" + src + "V");
int dst = src / 44; // 將220V電壓轉(zhuǎn)換成5V電壓
System.out.println("轉(zhuǎn)換后電壓:" + dst + "V");
return dst;
}
}
客戶(hù)端文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-611439.html
/**
* @Classname Client
* @Description TODO 客戶(hù)端代碼
* @Date 2023/7/25 09:06
* @Created by wangxianlin
*/
public class Client {
public static void main(String[] args) {
Voltage5V adapter = new VoltageAdapterNew(new Voltage220V());
int output5V = adapter.output5V();
System.out.println("輸出電壓:" + output5V + "V");
}
}
輸出結(jié)果文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-611439.html
原始電壓:220V
轉(zhuǎn)換后電壓:5V
輸出電壓:5V
到了這里,關(guān)于【設(shè)計(jì)模式】適配器模式(Adapter Pattern)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!