跟JBPM學設計模式之介面卡模式

2021-06-07 10:10:07 字數 2206 閱讀 9968

跟jbpm學設計模式之介面卡模式

模式簡介

介面卡模式(adapter),將乙個類的介面轉換成客戶希望的另乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

說起介面卡模式,大家一定會想起我們筆記本使用的介面卡。插座輸出的電壓是220v,我們的膝上型電腦是不能直接使用的,這個時候就需要乙個中介,它可以輸入220v的電壓,然後輸出膝上型電腦所需要的電壓。這個例子中,我們可以將插排輸出的電壓,理解為其對外發布的介面;而筆記本需要的輸入電壓,可以理解為客戶需要的介面;而介面卡的工作就是將服務者提供的介面「適配」成客戶需要的介面。

介面卡模式由類的介面卡模式和物件的介面卡模式兩種不同的形式。

類的介面卡模式將被適配的類的介面轉換成客戶需要的介面,其結構如下圖所示

圖1-1.類介面卡模式

從圖中可以看到adaptee類並沒有targetmethod方法,然而客戶端卻需要這個方法,為了是客戶端可以使用adaptee類,提供了乙個中介即adapter,其把adatee和target類的介面銜接起來。由於adapter繼承了adaptee類,這就決定這個是類介面卡模式。

該模式涉及到三種角色:

目標角色:其實客戶需要的介面,在類介面卡模式中,不可以是類。

源角色:提供服務並需要進行適配介面的類。

介面卡角色:其將源介面轉換成目標介面,顯然其不可能是介面,而必須是乙個類。

物件介面卡模式,與類的介面卡模式一樣,其也把被適配類的介面轉換成客戶需要的介面,但其不是通過繼承adaptee實現的,而是通過關聯adaptee類實現的。物件介面卡模式的結構如下圖

圖1-2.物件介面卡模式

同樣從圖中可以看到,adaptee類是沒有targetmethod方法的,但是客戶端是需要這個方法的。為了使客戶端可以使用這個類,則需要提供乙個包裝類adapter,其包裝了乙個adaptee的例項,從而使其可以把adaptee的介面與target類的介面銜接起來。adapter與adaptee是關聯關係,這決定了該模式是物件介面卡模式。

同樣這個模式中也涉及到三個角色,這與類介面卡模式是一樣的,不再贅述。

jbpm中的介面卡模式

介面卡模式分為類介面卡模式和物件介面卡模式,那我們也分別來看jbpm中的實現。

jbpm中的查詢相關的功能使用了類介面卡模式,例如歷史任務查詢,具體的結構如下圖所示

圖1-3 jbpm中的類介面卡模式

該模式涉及到的三種角色如下

目標角色:historyquery作為目標角色,提供了客戶需要的介面,比如設定查詢引數和獲取查詢結果的方法等。

源角色:abstractquery類作為源角色,其實現了整個的查詢邏輯,最終為客戶提供查詢服務,但是這些並不是客戶所需要的介面。

介面卡角色:historyqueryimpl作為介面卡角色,它將客戶需要的一些方法最終傳遞給為abstractquery來實現。

jbpm中的持久化使用的是hibernate,其中對hibernate中的session的封裝使用的是物件介面卡模式。具體的結構如下圖所示

圖1-4 jbpm中的物件介面卡模式

該模式涉及到的角色如下

目標角色:dbsession作為目標角色,提供了jbpm中需要使用的一些藉口,這些藉口有的具有一定的業務邏輯,其是hibernate不可能提供的。

源角色:session作為源角色,其提供了持久化過程中需要的一些具體的方法。

介面卡角色:dbsessionimpl作為介面卡角色,其也是將客戶需要的一些功能傳遞給持有的session物件,最終由session來進行實現。

介面卡模式的優勢和劣勢

1.在類介面卡模式中,由於介面卡類是源角色的子類,所以我們可以輕鬆的通過過載(override)來置換源角色中的方法;乙個介面卡只能適配乙個類,不能同時適配子類和父類。 2.

在物件介面卡模式中,同乙個介面卡可以把源角色及其子類都適配到目標介面;相對類介面卡模式,如果想置換源角色的方法相對要難一些;新增加一些方法比較容易,同時也使用與所有的源角色。

跟JBPM學設計模式之介面卡模式

跟jbpm學設計模式之介面卡模式 模式簡介 介面卡模式 adapter 將乙個類的介面轉換成客戶希望的另乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。說起介面卡模式,大家一定會想起我們筆記本使用的介面卡。插座輸出的電壓是220v,我們的膝上型電腦是不能直接使用的,這個...

HeadFrist設計模式學習之介面卡模式

介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。需求描述 jvm的公園裡有很多動物,在必要時會將動物們放置在box裡面,所以有很多box和動物。現有的是乙個可以放置十個鴨子的duckbox類,其showmsg 方法可以列印每個位置的資訊,具體如下 ...

OOAD 設計模式之介面卡(Adapter)模式

介面卡模式是物件的結構模式。介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。類的介面卡模式是通過繼承類適配者類實現,類介面卡實現客類所需的介面,當客戶物件呼叫類介面卡方法時,介面卡內部呼叫它所繼承的適配者的方法。物件的介面卡利用了...