今天來學習橋接模式,在我們日常生活中,有很多的事物是可以「多維度」的變化的,比如我們去吃麵條,有雞絲面和牛肉麵兩種,每一種面又分為辣味的和不辣的,而且每種面可能會分為大碗小碗的。。。很多事物能夠變化的維度不止一種,甚至數十種,那麼我們在**上怎麼應對這些變化呢?每乙個都單獨弄乙個類顯然不是什麼好辦法。。那麼我們就需要用到今天學習的橋接模式了。
只知道概念是不夠的,那麼我們怎麼去做呢?簡單的來說, 橋接模式的做法是把變化部分抽象出來,使變化部分與主類分離開來,從而將多個維度的變化徹底分離。最後,提供乙個管理類來組合不同維度上的變化,通過這種組合來滿足業務的需要。
上邊這句話是不是很拗口?其實我也看不懂,沒關係,我們敲一遍就知道是什麼意思了。
我們舉個生活中的例子,就拿電腦的cpu來說,我們知道cpu生產廠商有兩家比較出名,那就是amd和intel,他們旗下的產品有好多型號,為了簡單起見,我們把這些型號按頻率分為2ghz和3ghz兩組。好了,現在兩個維度已經出來了,乙個是生產廠商,乙個就是cpu的頻率了。我們就用這個作為例子,來說明一下橋接模式的用法。
首先還是先貼出包結構:
我們首先把頻率抽象為介面(生產廠商是介面也可以,這個無所謂的)
package com.bridge.intf;
/** * cpu的頻率
* @author zhengwei
* @date 2015-8-7
*/public inte***ce cpurate
其次就是2ghz和3ghz的實現類
package com.bridge.impl;
import com.bridge.intf.cpurate;
/** * 頻率為2ghz的cpu
* @author zhengwei
* @date 2015-8-7
*/public class rate2cpu implements cpurate
}
package com.bridge.impl;
import com.bridge.intf.cpurate;
/** * 頻率為3ghz的cpu
* @author zhengwei
* @date 2015-8-7
*/public class rate3cpu implements cpurate
}
以上只是簡單的輸出,在正式專案中可以替換為具體的操作。
然後就是乙個抽象類,我們這裡把生產廠商作為抽象類(兩個維度是可以變化的,乙個抽象類乙個介面,或者兩個都是介面也可以,但是抽象類作為乙個「管理者」,是一定要有的,也就是說兩個維度都是介面的話,還要在新建乙個抽象類,這裡只不過把生產廠商的維度和抽象類結合在一起了)
package com.bridge.abs;
import com.bridge.intf.cpurate;
/** * cpu的生產廠商
* @author zhengwei
* @date 2015-8-7
*/public abstract class cpufactory
public abstract void abscpufactory();
}
之後就是生產廠商的具體實現了
package com.bridge.abs.impl;
import com.bridge.abs.cpufactory;
import com.bridge.intf.cpurate;
/** * 具體的cpu生產廠商
* @author zhengwei
* @date 2015-8-7
*/public class amd extends cpufactory
@override
public void abscpufactory()
}
package com.bridge.abs.impl;
import com.bridge.abs.cpufactory;
import com.bridge.intf.cpurate;
/** * 具體的cpu生產廠商
* @author zhengwei
* @date 2015-8-7
*/public class intel extends cpufactory
@override
public void abscpufactory()
}
最後是測試類
package com.bridge.main;
import com.bridge.abs.impl.amd;
import com.bridge.abs.impl.intel;
import com.bridge.impl.rate2cpu;
import com.bridge.impl.rate3cpu;
public class bridgemain
}
最後的結果
這樣一來,我們分別實現了每乙個維度,這些不同的維度之間就可以隨意切換了,避免了每乙個新的型別就要新建乙個類。多個維度的也是如此。
設計模式之橋接模式
public class test 兩個維度 乙個是具體產品,如狗 豬 乙個是抽象產品,如溫順的動物 冷酷的動物 排列組合 如溫順的狗 冷酷的豬等 abstract class animal 該橋接類的引入是關鍵 abstract class animalbridge extends animal ...
設計模式之橋接模式
在軟體系統中,某些型別由於自身的邏輯,它具有兩個或多個維度的變化,那麼如何應對這種 多維度的變化 如何利用物件導向的技術來使得該型別能夠輕鬆的沿著多個方向進行變化,而又不引入額外的複雜度?這就要使用橋接模式。現在有咖啡,按大小分可以分為中杯和大杯,按型別可以分為拿鐵和摩卡,所以現在總共有四中咖啡,中...
設計模式之橋接模式
什麼是橋接模式 橋接模式的4個角色 示例 package com.pattern.bridge 公司類,抽象類,具體的公司需要繼承這個類 author yjzhou public abstract class corp public void makemoney package com.patter...