跟JBPM学设计模式之适配器模式
跟JBPM學(xué)設(shè)計(jì)模式之適配器模式
模式簡介
???????? 適配器模式(Adapter),將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
???????? 說起適配器模式,大家一定會(huì)想起我們筆記本使用的適配器。插座輸出的電壓是220v,我們的筆記本電腦是不能直接使用的,這個(gè)時(shí)候就需要一個(gè)中介,它可以輸入220v的電壓,然后輸出筆記本電腦所需要的電壓。這個(gè)例子中,我們可以將插排輸出的電壓,理解為其對外發(fā)布的接口;而筆記本需要的輸入電壓,可以理解為客戶需要的接口;而適配器的工作就是將服務(wù)者提供的接口“適配”成客戶需要的接口。
???????? 適配器模式由類的適配器模式和對象的適配器模式兩種不同的形式。
???????? 類的適配器模式將被適配的類的接口轉(zhuǎn)換成客戶需要的接口,其結(jié)構(gòu)如下圖所示
圖 1-1.類適配器模式
???????? 從圖中可以看到Adaptee類并沒有TargetMethod方法,然而客戶端卻需要這個(gè)方法,為了是客戶端可以使用Adaptee類,提供了一個(gè)中介即Adapter,其把Adatee和Target類的接口銜接起來。由于Adapter繼承了Adaptee類,這就決定這個(gè)是類適配器模式。
???????? 該模式涉及到三種角色:
???????? 目標(biāo)角色:其實(shí)客戶需要的接口,在類適配器模式中,不可以是類。
???????? 源角色:提供服務(wù)并需要進(jìn)行適配接口的類。
???????? 適配器角色:其將源接口轉(zhuǎn)換成目標(biāo)接口,顯然其不可能是接口,而必須是一個(gè)類。
???????? 對象適配器模式,與類的適配器模式一樣,其也把被適配類的接口轉(zhuǎn)換成客戶需要的接口,但其不是通過繼承Adaptee實(shí)現(xiàn)的,而是通過關(guān)聯(lián)Adaptee類實(shí)現(xiàn)的。對象適配器模式的結(jié)構(gòu)如下圖
圖 1-2.對象適配器模式
???????? 同樣從圖中可以看到,Adaptee類是沒有TargetMethod方法的,但是客戶端是需要這個(gè)方法的。為了使客戶端可以使用這個(gè)類,則需要提供一個(gè)包裝類Adapter,其包裝了一個(gè)Adaptee的實(shí)例,從而使其可以把Adaptee的接口與Target類的接口銜接起來。Adapter與Adaptee是關(guān)聯(lián)關(guān)系,這決定了該模式是對象適配器模式。
???????? 同樣這個(gè)模式中也涉及到三個(gè)角色,這與類適配器模式是一樣的,不再贅述。
JBPM中的適配器模式
???????? 適配器模式分為類適配器模式和對象適配器模式,那我們也分別來看jbpm中的實(shí)現(xiàn)。
???????? JBPM中的查詢相關(guān)的功能使用了類適配器模式,例如歷史任務(wù)查詢,具體的結(jié)構(gòu)如下圖所示
圖 1-3 JBPM中的類適配器模式
???????? 該模式涉及到的三種角色如下
???????? 目標(biāo)角色:HistoryQuery作為目標(biāo)角色,提供了客戶需要的接口,比如設(shè)置查詢參數(shù)和獲取查詢結(jié)果的方法等。
???????? 源角色:AbstractQuery類作為源角色,其實(shí)現(xiàn)了整個(gè)的查詢邏輯,最終為客戶提供查詢服務(wù),但是這些并不是客戶所需要的接口。
???????? 適配器角色:HistoryQueryImpl作為適配器角色,它將客戶需要的一些方法最終傳遞給為AbstractQuery來實(shí)現(xiàn)。
???????? JBPM中的持久化使用的是Hibernate,其中對hibernate中的Session的封裝使用的是對象適配器模式。具體的結(jié)構(gòu)如下圖所示
圖 1-4 JBPM中的對象適配器模式
???????? 該模式涉及到的角色如下
???????? 目標(biāo)角色:DbSession作為目標(biāo)角色,提供了JBPM中需要使用的一些借口,這些借口有的具有一定的業(yè)務(wù)邏輯,其是hibernate不可能提供的。
???????? 源角色:Session作為源角色,其提供了持久化過程中需要的一些具體的方法。
???????? 適配器角色:DbSessionImpl作為適配器角色,其也是將客戶需要的一些功能傳遞給持有的session對象,最終由session來進(jìn)行實(shí)現(xiàn)。
適配器模式的優(yōu)勢和劣勢
1.????? 在類適配器模式中,由于適配器類是源角色的子類,所以我們可以輕松的通過重載(override)來置換源角色中的方法;一個(gè)適配器只能適配一個(gè)類,不能同時(shí)適配子類和父類。
2.????? 在對象適配器模式中,同一個(gè)適配器可以把源角色及其子類都適配到目標(biāo)接口;相對類適配器模式,如果想置換源角色的方法相對要難一些;新增加一些方法比較容易,同時(shí)也使用與所有的源角色。
總結(jié)
以上是生活随笔為你收集整理的跟JBPM学设计模式之适配器模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PLinq Lookup Paralle
- 下一篇: 标题:ASP.NET几种进行性能优化的方