設(shè)計(jì)模式探索系列之Bridge模式

字號(hào):

概述
    在軟件系統(tǒng)中,某些類型由于自身的邏輯,它具有兩個(gè)或多個(gè)維度的變化,那么如何應(yīng)對(duì)這種“多維度的變化”?如何利用面向?qū)ο蟮募夹g(shù)來使得該類型能夠輕松的沿著多個(gè)方向進(jìn)行變化,而又不引入額外的復(fù)雜度?這就要使用Bridge模式。
    將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立的變化。[GOF 《設(shè)計(jì)模式》]
    生活中的例子
    橋接模式將抽象部分與它的實(shí)現(xiàn)分離,使它們能夠獨(dú)立地變化。一個(gè)普通的開關(guān)控制的電燈、電風(fēng)扇等等,都是橋接的例子。開關(guān)的目的是將設(shè)備打開或關(guān)閉。實(shí)際的開關(guān)可以是簡單的雙刀拉鏈開關(guān),也可以是調(diào)光開關(guān)。
     
    橋接模式解說
    在創(chuàng)建型模式里面,我曾經(jīng)提到過抽象與實(shí)現(xiàn),抽象不應(yīng)該依賴于具體實(shí)現(xiàn)細(xì)節(jié),實(shí)現(xiàn)細(xì)節(jié)應(yīng)該依賴于抽象。看下面這幅圖:
    在這種情況下,如果抽象B穩(wěn)定,而實(shí)現(xiàn)細(xì)節(jié)b變化,這時(shí)用創(chuàng)建型模式來解決沒有問題。但是如果抽象B也不穩(wěn)定,也是變化的,該如何解決?這就要用到Bridge模式了。
    我們?nèi)匀挥萌罩居涗浌ぞ哌@個(gè)例子來說明Bridge模式?,F(xiàn)在我們要開發(fā)一個(gè)通用的日志記錄工具,它支持?jǐn)?shù)據(jù)庫記錄DatabaseLog和文本文件記錄FileLog兩種方式,同時(shí)它既可以運(yùn)行在.NET平臺(tái),也可以運(yùn)行在Java平臺(tái)上。