`

Bridge 桥接

阅读更多

 

 

 

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模式的本意。

 

 

 

 

 

 

 

  • 大小: 72 KB
  • 大小: 84.6 KB
  • 大小: 81.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics