外觀模式 結構型模式

2021-09-26 04:12:06 字數 2272 閱讀 8364

1 基礎知識

定義:提供了乙個統一的介面,用來訪問子系統中的一群介面。特徵:定義了乙個高層介面讓子系統更容易使用

使用場景:子系統複雜,增加外觀模式提供呼叫介面;當構建多層系統時利用外觀物件作為每層的入口簡化層間呼叫。

優點:簡化了呼叫過程,無需深入了解子系統;減少系統依賴、鬆散耦合;符合迪公尺特原則。

缺點:增加子系統、擴充套件子系統行為時容易引入風險;不符合開閉原則。

2 **示例

禮物類 pointsgift:

/**

* 積分禮物類 */

public

class

pointsgift

public

string getname()

}

積分驗證子系統:qualifyservice

public

class

qualifyservice

}

支付積分子系統:pointspaymentservice 

public

class

pointspaymentservice

}

物流子系統:shippingservice

public

class

shippingservice

}

這樣就需要應用層一次與這三個子系統進行對接呼叫,還必要嚴格按照順序,因此是比較麻煩的,故考慮設計乙個類管理這三個系統,應用層只需要和這個管理類交換即可,這樣充分滿足了迪公尺特原則。

外觀類:giftexchangeservice

public

class

giftexchangeservice }}

}

應用層只需要簡單的呼叫即可:

public

class

test

}

其類關係圖如下圖所示:

可以看出應用層只與外觀類發生了交換,這也是判斷外觀模式設定是否合理的重要標誌。當新增乙個子系統時還要修改外觀類,從這一角度分析其並不符合開閉原則的。

3 原始碼中的使用

(1)jdbc中的使用

對jdbcutils物件檢視其方法,關注其引數可以看到有connection、statement、datasource這些jdbc中含的物件,這裡jdbcutils就是外觀類,對原生態的jdbc進行了封裝。

(2)mybatis中的使用

在connection類中有這些方法:

public

metaobject newmetaobject(object object)

public

parameterhandler = (parameterhandler)this

.interceptorchain.pluginall(parameterhandler);

return

parameterhandler;

}public

resultsethandler resultsethandler = new

resultsethandler resultsethandler = (resultsethandler)this

.interceptorchain.pluginall(resultsethandler);

return

resultsethandler;

}public

statementhandler statementhandler = new

statementhandler statementhandler = (statementhandler)this

.interceptorchain.pluginall(statementhandler);

return

statementhandler;

}

這些以new開頭的方法均是外觀模式的體現,應用層通過connection類的某一方法來具體使用某一功能,若關注其中的第乙個new的話也可以說是簡單工廠模式,從整體上而言則是外觀模式。

結構型模式 外觀模式

外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。外觀模式將客戶端與子系統的內部複雜性進行分隔開,使得客戶端只需要與外觀物件打交道,而不需要與子系統內部的很多物件打交道。外觀模式的目的在於減少系統的複雜程度。在物件導向軟體系...

外觀模式 結構型模式

1 我們可以把幕布 投影儀 折疊椅,看成乙個小的系統,它裡面又有具體的相關操作。2 我們有乙個客戶端,比如開始的時候。我們就去呼叫幕布的開啟方法,投影儀的開啟方法,折疊椅的開啟方法。3 同理我們的中間 結束也都是呼叫相對應的操作方法。這樣存在乙個問題就是 外觀模式理解起來很簡單,就是我們對其提出乙個...

結構型模式 外觀模式

收藏 深入淺出外觀模式 外觀模式定義如下 外觀模式 為子系統中的一組介面提供乙個統一的入口。外觀模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。外觀模式又稱為門面模式,它是一種物件結構型模式。外觀模式是迪公尺特法則的一種具體實現,通過引入乙個新的外觀角色可以降低原有系統的複雜度,同時降低...