適配器的定義
適配器就是一個(gè)接口轉(zhuǎn)換器闪湾,它可以是一個(gè)獨(dú)立的硬件接口設(shè)備,允許硬件或電子接口與其它硬件或電子接口相連绩卤,也可以是信息接口途样。比如:電源適配器、三角架基座轉(zhuǎn)接部件濒憋、USB與串口的轉(zhuǎn)接設(shè)備等何暇。
兩種模式:
- 類(lèi)適配器模式:使用繼承的適配器 接口
- 對(duì)象適配器模式:使用委托的適配器 抽象類(lèi)
涉及角色:
- 源角色(Adaptee):需要適配的類(lèi)
- 目標(biāo)角色(Target):想要得到的接口
- 適配器(Adapter):轉(zhuǎn)換裝置
類(lèi)適配器模式例子
源角色
public class Banner {
private String string;
public Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
目標(biāo)角色
public interface Print {
void printWeak();
void printStrong();
}
適配器
public class PrintBanner extends Banner implements Print{
public PrintBanner(String string) {
super(string);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
測(cè)試類(lèi)
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}
打印輸出
(Hello)
*Hello*
對(duì)象適配器模式
目標(biāo)角色
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
適配器
public class PrintBanner extends Print{
private Banner banner;
public PrintBanner(String string) {
banner = new Banner(string);
}
@Override
public void printWeak() {
banner.showWithAster();
}
@Override
public void printStrong() {
banner.showWithParen();
}
}
適配器的優(yōu)點(diǎn)
系統(tǒng)需要使用現(xiàn)有的類(lèi),而此類(lèi)的接口不符合系統(tǒng)的需要凛驮。那么通過(guò)適配器模式就可以讓這些功能得到更好的復(fù)用裆站。在實(shí)現(xiàn)適配器功能的時(shí)候,可以調(diào)用自己開(kāi)發(fā)的功能,從而自然地?cái)U(kuò)展系統(tǒng)的功能宏胯。
適配器的缺點(diǎn)
過(guò)多的使用適配器羽嫡,會(huì)讓系統(tǒng)非常零亂,不易整體進(jìn)行把握肩袍。
使用場(chǎng)景
- 舊版本適配新版本,舊版本經(jīng)過(guò)測(cè)試已經(jīng)穩(wěn)定運(yùn)行很久杭棵。在更新版本時(shí),想要拋棄舊版本了牛,又要兼容舊版本颜屠,就可以使用適配器模式來(lái)適配舊版本對(duì)象
- 功能不同的類(lèi)使用適配器進(jìn)行轉(zhuǎn)換,使得類(lèi)可以使用鹰祸。
- 讓現(xiàn)有的類(lèi)適配新的接口