Java 設(shè)計(jì)模式之適配器模式詳解
定義
適配器將一個類的接口,轉(zhuǎn)換成客戶期望另一個接口。適配器讓原本不兼容的類可以合作無間
結(jié)構(gòu)圖

如圖所示,兩腳插頭如何能插入三腳插座,可以在中間加一個適配器進(jìn)行轉(zhuǎn)換,就能實(shí)現(xiàn)兩腳插頭能插入三腳插座。
使用場景
- 新的代碼兼容舊的代碼
- 使用別人好的代碼到自己的代碼中
代碼實(shí)現(xiàn)
適配器模式有:對象適配器和類適配器
Java代碼實(shí)現(xiàn)
java沒有多繼承,只能實(shí)現(xiàn)對象適配器
先創(chuàng)建兩個接口
// 適配目標(biāo)接口
public interface Target{
public void aaa();
}
// 適配者接口
public interface Adaptee{
public void bbb();
}
實(shí)現(xiàn)這兩個接口
public class Targetimpl implements Target{
public void aaa(){
System.out.printnln("Target")
}
}
public class Adapteeimpl implements Adaptee{
public void bbb(){
System.out.printnln("Adaptee")
}
}
制作適配器
需要實(shí)現(xiàn)要適配成什么接口,需要實(shí)現(xiàn)什么接口
public class Adapter implements Target{
Adaptee adaptee;
public Adapter(Adaptee adapter){
this.adaptee = adaptee;
}
public void aaa(){
adaptee.bbb()
}
}
public class Run{
public static void main(String[] args){
Adaptee adaptee = new Adatee();
Target target = new Targetimpl();
Target adapter = new Adapter(target);
adaptee.aaa();
target.bbb();
adapter.aaa();
}
}
運(yùn)行結(jié)果:
Target
Adaptee
Adaptee
Python代碼實(shí)現(xiàn)
Python可以實(shí)現(xiàn)對象適配器和類適配器
這是對象適配器
# 適配目標(biāo)
class Target(object):
def aaa(self):
print("Target")
# 被適配者
class Adaptee(object):
def bbb(self):
print("Adaptee")
# 這是適配器
class Adapter(Target):
def __init__(self, Adaptee):
self.Adaptee = Adaptee
def aaa(self):
self.Adaptee.bbb()
target = Target()
adaptee = Adaptee()
adapter = Adapter(adaptee)
target.aaa()
adaptee.bbb()
adapter.aaa()
運(yùn)行結(jié)果:
Target
Adaptee
Adaptee
這是類適配器
class Target(object):
def aaa(self):
print("Target")
class Adaptee(object):
def bbb(self):
print("Adaptee")
class Adapter(Target, Adaptee):
def aaa(self):
self.bbb()
target = Target()
adaptee = Adaptee()
adapter = Adapter()
target.aaa()
adaptee.bbb()
adapter.aaa()
運(yùn)行結(jié)果:
Target
Adaptee
Adaptee
到此這篇關(guān)于Java 設(shè)計(jì)模式之適配器模式詳解的文章就介紹到這了,更多相關(guān)Java 設(shè)計(jì)模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合FastDFS中間件實(shí)現(xiàn)文件分布管理
FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進(jìn)行管理,功能包括:文件存儲、文件同步、文件上傳、文件下載等,解決了大容量存儲和負(fù)載均衡的問題,本文介紹了SpringBoot整合FastDFS中間件實(shí)現(xiàn)文件分布管理,需要的朋友可以參考下2024-08-08
java連接Mongodb實(shí)現(xiàn)增刪改查
這篇文章主要為大家詳細(xì)介紹了java連接Mongodb實(shí)現(xiàn)增刪改查,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03
Java中的Random()函數(shù)及兩種構(gòu)造方法
Java中存在著兩種Random函數(shù)分別是java.lang.Math.Random和java.util.Random,文中給大家介紹了random()的兩種構(gòu)造方法,感興趣的朋友跟隨小編一起看看吧2018-11-11
SpringBoot在idea中的 .idea和 .iml文件的作用
本文主要介紹了SpringBoot在idea中的 .idea和 .iml文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
關(guān)于Spring BeanPostProcessor的執(zhí)行順序
這篇文章主要介紹了Spring BeanPostProcessor的執(zhí)行順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
IDEA創(chuàng)建Servlet并配置web.xml的實(shí)現(xiàn)
這篇文章主要介紹了IDEA創(chuàng)建Servlet并配置web.xml的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
淺談一下Java為什么不能使用字符流讀取非文本的二進(jìn)制文件
這篇文章主要介紹了淺談一下為什么不能使用字符流讀取非文本的二進(jìn)制文件,剛學(xué)Java的IO流部分時,書上說只能使用字節(jié)流去讀取圖片、視頻等非文本二進(jìn)制文件,不能使用字符流,否則文件會損壞,需要的朋友可以參考下2023-04-04
從實(shí)戰(zhàn)角度詳解Disruptor高性能隊(duì)列
這篇文章主要介紹了從實(shí)戰(zhàn)角度詳解Disruptor高性能隊(duì)列,對正在學(xué)習(xí)這方面知識的小伙伴有很大的幫助,感興趣的小伙伴快來一起學(xué)習(xí)吧2021-08-08

