1 基礎知識
定義:提供了乙個統一的介面,用來訪問子系統中的一群介面。特徵:定義了乙個高層介面讓子系統更容易使用
使用場景:子系統複雜,增加外觀模式提供呼叫介面;當構建多層系統時利用外觀物件作為每層的入口簡化層間呼叫。
優點:簡化了呼叫過程,無需深入了解子系統;減少系統依賴、鬆散耦合;符合迪公尺特原則。
缺點:增加子系統、擴充套件子系統行為時容易引入風險;不符合開閉原則。
2 **示例
禮物類 pointsgift:
/**積分驗證子系統:qualifyservice* 積分禮物類 */
public
class
pointsgift
public
string getname()
}
public支付積分子系統:pointspaymentserviceclass
qualifyservice
}
public物流子系統:shippingserviceclass
pointspaymentservice
}
public這樣就需要應用層一次與這三個子系統進行對接呼叫,還必要嚴格按照順序,因此是比較麻煩的,故考慮設計乙個類管理這三個系統,應用層只需要和這個管理類交換即可,這樣充分滿足了迪公尺特原則。class
shippingservice
}
外觀類:giftexchangeservice
public應用層只需要簡單的呼叫即可:class
giftexchangeservice }}
}
public其類關係圖如下圖所示:class
test
}
可以看出應用層只與外觀類發生了交換,這也是判斷外觀模式設定是否合理的重要標誌。當新增乙個子系統時還要修改外觀類,從這一角度分析其並不符合開閉原則的。
3 原始碼中的使用
(1)jdbc中的使用
對jdbcutils物件檢視其方法,關注其引數可以看到有connection、statement、datasource這些jdbc中含的物件,這裡jdbcutils就是外觀類,對原生態的jdbc進行了封裝。
(2)mybatis中的使用
在connection類中有這些方法:
public這些以new開頭的方法均是外觀模式的體現,應用層通過connection類的某一方法來具體使用某一功能,若關注其中的第乙個new的話也可以說是簡單工廠模式,從整體上而言則是外觀模式。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;
}
結構型模式 外觀模式
外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。外觀模式將客戶端與子系統的內部複雜性進行分隔開,使得客戶端只需要與外觀物件打交道,而不需要與子系統內部的很多物件打交道。外觀模式的目的在於減少系統的複雜程度。在物件導向軟體系...
外觀模式 結構型模式
1 我們可以把幕布 投影儀 折疊椅,看成乙個小的系統,它裡面又有具體的相關操作。2 我們有乙個客戶端,比如開始的時候。我們就去呼叫幕布的開啟方法,投影儀的開啟方法,折疊椅的開啟方法。3 同理我們的中間 結束也都是呼叫相對應的操作方法。這樣存在乙個問題就是 外觀模式理解起來很簡單,就是我們對其提出乙個...
結構型模式 外觀模式
收藏 深入淺出外觀模式 外觀模式定義如下 外觀模式 為子系統中的一組介面提供乙個統一的入口。外觀模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。外觀模式又稱為門面模式,它是一種物件結構型模式。外觀模式是迪公尺特法則的一種具體實現,通過引入乙個新的外觀角色可以降低原有系統的複雜度,同時降低...