java設計模式之淺談適配器模式
一、結構型模式
結構型模式有什么好處?
從程序的結構上實現(xiàn)松耦合,從而可以擴大整體的類結構,用來解決更大的問題
二、適配器模式
USB網(wǎng)線轉換器

三、什么是適配器模式?
將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本接口不兼容而不能一起工作的那些類能夠變得在一起工作!
四、角色分析
目標接口:客戶所期待的接口,目標可以是具體的或抽象的類,也可以是接口
需要適配的類:需要適配的類或適配者類
適配器:通過包裝一個需要適配的對象,把原接口轉換成目標對象!
例子:
適配的類:網(wǎng)線
package com.jialidun.gof.adapter;
//要被適配的類:網(wǎng)線
public class Adaptee {
public void request(){
System.out.println("連接網(wǎng)線上網(wǎng)!");
}
}
接口轉換器的抽象方法
package com.jialidun.gof.adapter;
//接口轉換器的抽象實現(xiàn)
public interface NetToUsb {
//作用:處理請求 網(wǎng)線插到USB上
public void hanleRequest();
}
真正的適配器,需要連接USB,連接網(wǎng)線
package com.jialidun.gof.adapter;
//真正的適配器,需要連接USB,連接網(wǎng)線
//方式1 繼承(類適配器、單繼承)
public class Adapter extends Adaptee implements NetToUsb{
@Override
public void hanleRequest() {
super.request();//可以上網(wǎng)了
}
}
創(chuàng)建客戶端,需要上網(wǎng),網(wǎng)線不匹配
package com.jialidun.gof.adapter;
//客戶端類:想上網(wǎng),插不上網(wǎng)線
public class Computer {
//我們的電腦需要連接上轉接器才可以上網(wǎng)
public void net(NetToUsb adapter){
//上網(wǎng)的具體實現(xiàn),找一個轉接頭
adapter.hanleRequest();
}
public static void main(String[] args) {
//電腦 適配器 網(wǎng)線
Computer computer = new Computer();//電腦
Adaptee adaptee = new Adaptee();//網(wǎng)線
Adapter adapter = new Adapter();//轉接器
computer.net(adapter);
}
}
上面的例子有局限性,盡量不使用繼承,修改方法
修改適配器
package com.jialidun.gof.adapter;
//方式2 組合(對象適配器、常用)
public class Adaapter2 implements NetToUsb{
private Adaptee adaptee;
public Adaapter2(Adaptee adaptee){
this.adaptee = adaptee;
}
@Override
public void hanleRequest() {
adaptee.request();
}
}
客戶端
package com.jialidun.gof.adapter;
//客戶端類:想上網(wǎng),插不上網(wǎng)線
public class Computer {
//我們的電腦需要連接上轉接器才可以上網(wǎng)
public void net(NetToUsb adapter){
//上網(wǎng)的具體實現(xiàn),找一個轉接頭
adapter.hanleRequest();
}
public static void main(String[] args) {
//電腦 適配器 網(wǎng)線
// Computer computer = new Computer();//電腦
// Adaptee adaptee = new Adaptee();//網(wǎng)線
// Adapter adapter = new Adapter();//轉接器
//
// computer.net(adapter);
Computer computer = new Computer();//電腦
Adaptee adaptee = new Adaptee();//網(wǎng)線
Adaapter2 adaapter2 = new Adaapter2(adaptee);
adaapter2.hanleRequest();
}
}

五、對象適配器有哪些優(yōu)點
1.一個對象適配器可以把多個不同的適配者適配到同一個目標。
2.可以適配一個適配者的子類,由于適配器和適配者之間是關聯(lián)關系,根據(jù)"里氏替換原則",適配者的子類也可通過該適配器進行適配。
六、類適配器缺點
對于Java、C#等不支持多重類繼承的語言,一次最多只能適配一個適配者類,不能同時適配多個適配者;
在Java、C#等語言中,類適配器模式中的目標抽象類只能為接口,不能為類,其使用有一定的局限性。
七、使用場景
系統(tǒng)需要使用一些現(xiàn)有的類,而這些類的接口(如方法名)不符合系統(tǒng)的需求,甚至沒有這些類的源代碼。
想創(chuàng)建一個重復使用的類,用于與一些彼此之間沒有太大關聯(lián)的一些類,包括一些可能在將來引進的類一起工作。
例如SpringMVC中DispacherServlet、HandlerAdpter等
到此這篇關于java設計模式之淺談適配器模式的文章就介紹到這了,更多相關java適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Mybatis基于xml配置實現(xiàn)單表的增刪改查功能
這篇文章主要介紹了Mybatis基于xml配置實現(xiàn)單表的增刪改查,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
SpringMVC?RESTFul實戰(zhàn)案例修改功能實現(xiàn)
這篇文章主要為大家介紹了SpringMVC?RESTFul實戰(zhàn)案例修改功能實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
springboot+thymeleaf國際化之LocaleResolver接口的示例
本篇文章主要介紹了springboot+thymeleaf國際化之LocaleResolver的示例 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
Java 利用DeferredResult實現(xiàn)http輪詢實時返回數(shù)據(jù)接口
這篇文章主要介紹了Java 利用 DeferredResult 實現(xiàn) http 輪詢實時返回數(shù)據(jù)接口,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下2021-03-03
IDEA2022創(chuàng)建Maven Web項目教程(圖文)
本文主要介紹了IDEA2022創(chuàng)建Maven Web項目教程,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07

