設計模式之略見一斑 介面卡模式Adapter

2021-08-25 01:44:52 字數 2304 閱讀 3209

介面卡模式就是基於客戶提供的介面和功能,再此基礎上實現具體業務功能。

它大體分為兩類:類介面卡與物件介面卡

1.類介面卡

類介面卡就是本著在客戶提供功能介面與業務bo的基礎上實現業務功能。

該類需要繼承第三方類並實現定義的介面,再在這個介面的方法實現中呼叫父類(即第三方類)中需要用到的方法。

先舉個例子,我們每次登入qq時,都會獲取當天的新聞資訊,假如我們定義乙個通用的customer,它包含有qnumber,logindate,friends三個屬性

public class customer

public list getfriends()

public void setfriends(list friends)

public date getlogindate()

public void setlogindate(date logindate)

public string getqnumber()

public void setqnumber(string qnumber)

}

再有就是乙個業務功能介面

public inte***ce loginevent

這個事件就是當客戶端登入時自動獲得新聞資訊,那麼這時假哪qq客戶端有多種可能性,如linux下的客戶或者windows下的客戶端.

我們分別定義這兩個類為

.linuxcustomer

.windowscustomer

為了能夠讓這兩個物件都能夠實現當它們登入時都能夠獲得登入資訊,我們就可以通過繼續cutomer並實現介面loginevent.

public class linuxcostomer extends customer implements loginevent

public void getnews()

//處理獲得資訊

private void dogetnews()

public static void main(string args)

}

這就是類介面卡,它就是繼承業務物件(customer)並實現業務功能介面(loginevent).

2.物件介面卡

如果開發者提供的只是抽象類,而不提供介面(很多時候抽象類都會預先實現了一些比較煩瑣的業務功能,使我們不用再去一一實現它,那樣會帶給我們很多方便)。這個時候我們就只能通過繼續抽象類,並把業務物件當做引數傳遞進去進行呼叫,這便就是物件介面卡

例子**如下:

開發者只提供的抽象類的loginevent

public abstract class loginevent

//登入時獲取新聞資訊

public abstract void getnews();

}

而linuxcustomer(linux客戶登入端)為了能夠獲取新聞資訊並且包含有登入端相應的屬性,我們可以通過建立如下介面卡linuxcostomer實現:

public class linuxcostomer extends loginevent   

public void getnews()

//處理獲得資訊

private void dogetnews()

public static void main(string args)

}

通過把customer當做引數傳遞給linuxcustomer同時繼承抽象類loginevent,過載該類的獲得新聞方法getnews

這種方式就是物件介面卡模式。

同理linux下系統可能分為各種各樣的系統如red hat,solaris等

我們就可以通過繼承linuxcustomer這個介面卡,然後再去實現相應的業務功能。

總結:其實這種開發形式在我們日常開發中很常見,只是有時候我們還不清楚而已。

類介面卡是通過繼承類適配者類實現的,另外類介面卡實現客戶類所需要的介面。當客戶物件呼叫介面卡類方法的時候,介面卡內部呼叫它所繼承的適配者的方法。

物件介面卡包含乙個介面卡者的引用與類介面卡相同,物件介面卡也實現了客戶類需要的介面。當客戶物件呼叫物件介面卡的方法的時候,物件介面卡調它所包含的介面卡者例項的適當方法。

它們的區別就下圖:

[img]

原文:

設計模式之略見一斑 外觀模式Facade

外觀模式又稱門面模式,它是為了給子系統中提供乙個一致的介面,從面定義了乙個高層介面 這個介面使得這一子系統更加容易使用。定義中提到的子系統指在設計中為了降低複雜性根據一定的規則,對系統進行的劃分,子系統封裝有一些類,客戶程式在使用子系統的時候,可能會像下圖一樣零亂。上面的實現中,客戶緊緊依賴在子系統...

設計模式之略見一斑 建造模式builder

建造模式是將複雜的內部建立封裝在內部,對於外部呼叫的人來說,只需要傳入建造者和建造工具,對於內部是如何建造成成品的,呼叫者無需關心。建造模式很象抽象工廠模式,細微的區別的大概只有在反覆使用的方能體會。舉個簡單的例子,如汽車,有很多部件,車輪,方向盤,發動機還有各種小零件等等,部件很多,但遠不止這些,...

設計模式之略見一斑 單例模式singleton

單例模式是屬於比較常用的一例,乙個類 class 在記憶體中只有乙個例項。常用方式如下 第一種 餓漢式 public class singleton 在自己內部定義自己乙個例項,是不是很奇怪?注意這是private 只供內部呼叫 private static singleton instance n...