Java中的介面卡設計模式

2021-08-29 12:30:13 字數 3185 閱讀 9518

介面卡就是一種適配中介軟體,它存在於不匹配的二者之間,用於連線二者,將不匹配變得匹配,簡單點理解就是平常所見的轉接頭,轉換器之類的存在。

介面卡模式有兩種:類介面卡、物件介面卡、介面介面卡

前二者在實現上有些許區別,作用一樣,第三個介面介面卡差別較大。

1、類介面卡模式:

原理:通過繼承來實現介面卡功能。

當我們要訪問的介面a中沒有我們想要的方法 ,卻在另乙個介面b中發現了合適的方法,我們又不能改變訪問介面a,在這種情況下,我們可以定義乙個介面卡p來進行中轉,這個介面卡p要實現我們訪問的介面a,這樣我們就能繼續訪問當前介面a中的方法(雖然它目前不是我們的菜),然後再繼承介面b的實現類bb,這樣我們可以在介面卡p中訪問介面b的方法了,這時我們在介面卡p中的介面a方法中直接引用bb中的合適方法,這樣就完成了乙個簡單的類介面卡。

詳見下方例項:我們以ps2與usb的轉接為例

ps2介面:ps2

public inte***ce ps2
usb介面:usb

public inte***ce usb
usb介面實現類:usber

public class user implements usb

}

介面卡:adapter

public class adapter extends usber implements ps2 

}

測試方法:clienter

public class clienter 

}

顯示結果:

usb口
例項講解:

我手中有個ps2插頭的裝置,但是主機上只有usb插頭的插口,怎麼辦呢?弄個轉換器,將ps2插頭轉換成為usb插頭就可以使用了。

介面ps2:描述ps2介面格式

介面usb:描述usb介面格式

類usber:是介面usb的實現類,是具體的usb介面格式

adapter:用於將ps2介面格式轉換成為usb介面格式

2、物件介面卡模式

原理:通過組合來實現介面卡功能。

當我們要訪問的介面a中沒有我們想要的方法 ,卻在另乙個介面b中發現了合適的方法,我們又不能改變訪問介面a,在這種情況下,我們可以定義乙個介面卡p來進行中轉,這個介面卡p要實現我們訪問的介面a,這樣我們就能繼續訪問當前介面a中的方法(雖然它目前不是我們的菜),然後在介面卡p中定義私有變數c(物件)(b介面指向變數名),再定義乙個帶引數的構造器用來為物件c賦值,再在a介面的方法實現中使用物件c呼叫其**於b介面的方法。

詳見下方例項:我們仍然以ps2與usb的轉接為例

ps2介面:ps2

public inte***ce ps2
usb介面:usb

public inte***ce usb
usb介面實現類:usber

public class usber implements usb 

}

介面卡:adapter

public class adapter implements ps2 

@override

public void isps2()

}

測試類:clienter

public class clienter 

}

結果顯示:

usb口
例項講解:

我手中有個ps2插頭的裝置,但是主機上只有usb插頭的插口,怎麼辦呢?弄個轉換器,將ps2插頭轉換成為usb插頭就可以使用了。

介面ps2:描述ps2介面格式

介面usb:描述usb介面格式

類usber:是介面usb的實現類,是具體的usb介面格式

adapter:用於將ps2介面格式轉換成為usb介面格式

3、介面介面卡模式

原理:通過抽象類來實現適配,這種適配稍別於上面所述的適配。

當存在這樣乙個介面,其中定義了n多的方法,而我們現在卻只想使用其中的乙個到幾個方法,如果我們直接實現介面,那麼我們要對所有的方法進行實現,哪怕我們僅僅是對不需要的方法進行置空(只寫一對大括號,不做具體方法實現)也會導致這個類變得臃腫,呼叫也不方便,這時我們可以使用乙個抽象類作為中介軟體,即介面卡,用這個抽象類實現介面,而在抽象類中所有的方法都進行置空,那麼我們在建立抽象類的繼承類,而且重寫我們需要使用的那幾個方法即可。

目標介面:a

public inte***ce a
介面卡:adapter

public abstract class adapter implements a 

public void b(){}

public void c(){}

public void d(){}

public void e(){}

public void f(){}

}

實現類:ashili

public class ashili extends adapter 

public void d()

}

測試類:clienter

public class clienter 

}

4、介面卡模式應用場景

類介面卡與物件介面卡的使用場景一致,僅僅是實現手段稍有區別,二者主要用於如下場景:

(1)想要使用乙個已經存在的類,但是它卻不符合現有的介面規範,導致無法直接去訪問,這時建立乙個介面卡就能間接去訪問這個類中的方法。

(2)我們有乙個類,想將其設計為可重用的類(可被多處訪問),我們可以建立介面卡來將這個類來適配其他沒有提供合適介面的類。

以上兩個場景其實就是從兩個角度來描述一類問題,那就是要訪問的方法不在合適的介面裡,乙個從介面出發(被訪問),乙個從訪問出發(主動訪問)。

介面介面卡使用場景:

想要使用介面中的某個或某些方法,但是介面中有太多方法,我們要使用時必須實現介面並實現其中的所有方法,可以使用抽象類來實現介面,並不對方法進行實現(僅置空),然後我們再繼承這個抽象類來通過重寫想用的方法的方式來實現。這個抽象類就是介面卡。

介面卡 JAVA設計模式

介面卡就是讓實現不同介面的類協同工作。1.定義乙個提供給客戶的目標介面target 2.定義乙個需要適配的類result 3.定義乙個介面卡adapter 對使用者的介面 public inte ce target 需要適配的類,此介面可能實現了其它的介面如usb3介面等。public class ...

java 介面卡設計模式

a.什麼是介面卡 在使用 的時候,需要定義乙個類事件 介面.通常介面中有多個方法,而程式中不一定所有的都用到,但又必須重寫,這很繁瑣.介面卡簡化了這些操作,我們定義 時只要繼承介面卡,然後重寫需要的方法即可.b.介面卡原理 介面卡就是乙個類,實現了 介面,所有抽象方法都重寫了,但是方法全是空的.介面...

JAVA設計模式 介面卡模式

介面卡模式 要點 1 介面卡模式主要應用於 希望復用一些現存的類,但是介面又與復用環境要求不一致的情況 在遺留 復用 類庫遷移等方面非常有用。2 介面卡模式有物件介面卡和類介面卡兩種形式的實現結構,但是類介面卡採用 多繼承 的實現方式,帶來了不良的高耦合,所以一般不推薦使用。物件介面卡採用 物件組合...