橋接模式的定義是将抽象部分與實作部分分離,使它們都可以獨立地變化。
這是什麼意思?抽象與實作不是本來就分離的嗎?比如父類是抽象類,子類是具體實作類。
其實在橋接模式裡,主要是用于處理2個或以上次元會變化的情況。比如畫筆有大、中、小三種,然後可以蘸上各種顔色進行畫畫,那麼存在兩個次元:畫筆大小,顔色。用橋接模式來處理,抽象類處理一個次元,而實作類處理另一個次元,抽象類與實作類不是繼承關系,而是關聯關系。橋接模式用合成複用代替了繼承。所謂的“橋”,就是指關聯。
我估計,如果有多個次元,那麼抽象類仍然隻處理其中一個次元,而每個次元都有一個實作類,然後關聯到抽象類。
說到關聯,橋接模式和裝飾模式何其相似!
如果硬是要說差別,
橋接模式:
class Client {
public static void main(String args[]) {
Image image;//對應抽象類
ImageImp imp;
image = (Image)XMLUtil.getBean("image");
imp = (ImageImp)XMLUtil.getBean("os");
image.setImageImp(imp); //選用具體的實作類
image.parseFile("小龍女");
}
}
裝飾模式
class Client
{
public static void main(String args[])
{
Component component,componentSB,componentBB; //全部使用抽象構件定義
component = new Window();
componentSB = new ScrollBarDecorator(component);
componentBB = new BlackBorderDecorator(componentSB); //将裝飾了一次之後的對象繼續注入到另一個裝飾類中,進行第二次裝飾
componentBB.display();
}
}
多輪裝飾之後,傳回來的還是那個對象。要不怎麼叫裝飾呢,牆壁粉刷多少遍,它都是那堵牆。你大媽早已不是你大媽,但你大爺始終都是你大爺。
由以上比較可知,