Bridge 桥接,对象结构型模式,将抽象部分与实现部分分离,使他们都可以独立的变化。
说句实话,我看《设计模式》的Bridge模式,看不懂,后来看了一个大杯、小杯的咖啡加不加奶的例子,看明白了Bridge模式的意图。
例子:
比如有个鞋店,有男鞋女鞋两种鞋(包括鞋和送的东西也可以选择不要),但是目前只送一个小熊玩具,以后会送的东西可以让你挑选。
可能刚开始这样设计:
但是后来,因为鞋子通过这样促销做的不错,准备送的东西品种多点,于是有加了个日记本
于是可能要这样的设计
店的生意很好,于是公司觉得这种促销很有效,于是有加了 送 杯子、相框、杂志、消费券
这时发现,类好像爆炸了一样,一下需要很多很多的子类。于是想想是不是一开始就把,鞋和送的东西分开呢?于是Bridge 模式就产生了。
注意,Addtion 和shoes 是一一对应的关系。
下面用As来实现一下。
Shoes.as
package {
public class Shoes {
public static const BEAR_ADDTION:String = "BearAddtion";
public static const BOOK_ADDTION:String = "BookAddtion";
public static const PHOTO_FRAME_ADDTION:String = "PhotoFrameaddtion";
private var addtion:Addtion;
public function Shoes(addtionType:String):void {
setAddtion(addtionType);
}
protected function setAddtion(addtionType:String):void {
if(addtionType == BEAR_ADDTION) {
addtion = new BearAddtion();
}
else if(addtionType == BOOK_ADDTION){
addtion = new BookAddtion();
}
else {
addtion = new PhotoFrameaddtion();
}
}
public function getAddtionInfo():void {
addtion.showInfo();
}
}
}
MaleShoes .as
package {
public class MaleShoes extends Shoes {
public function MaleShoes(addtionType:String) {
super(addtionType);
trace("MaleShoes");
}
}
}
FemaleShoes .as
package {
public class FemaleShoes extends Shoes {
public function FemaleShoes(addtionType:String) {
super(addtionType);
trace("FemaleShoes");
}
}
}
Addtion .as
package {
public class Addtion {
public function Addtion() {
}
public function showInfo():void {
throw new Error("showInfo");
}
}
}
BearAddtion .as
package {
public class BearAddtion extends Addtion {
public function BearAddtion():void {
}
override public function showInfo():void {
trace("added Bear");
}
}
}
BookAddtion .as
package {
public class BookAddtion extends Addtion {
public function BookAddtion():void {
}
override public function showInfo():void {
trace("added Book");
}
}
}
PhotoFrameaddtion .as
package {
public class PhotoFrameaddtion extends Addtion {
public function PhotoFrameaddtion():void {
}
override public function showInfo():void {
trace("added PhotoFrame");
}
}
通过对象组合的方式,Bridge模式把两个角色之间的继承关系改为了耦合的关系,从而使这两者可以从容自若的各自独立的变化,这也是Bridge模式的本意。