設計模式_橋樑模式


Bridge Pattern

    Decouple an abstraction from its implementation so that the two can vary independently.(將抽象和實現解耦,使得倆者可以獨立的變化)


例子
"天下熙熙,皆爲利來;天下攘攘,皆爲利往"  現實和結構分開
服裝公司 ="服裝"+"公司" ="服裝公司"  
解耦之前是服裝公司,寫一個Corp公司抽象類,然後就行了,解耦後,變成"服裝"+"公司",服裝抽象化爲產品,而公司抽象爲公司,倆者可獨立變化,在抽象層面實現解耦。 

產品抽象
public abstract class Product {
 public abstract void beProducted();
 public abstract void beSelled();
} 

公司抽象

public abstract class Corp {
 private Product product;
 
 public Corp(Product _product){
  this.product=_product;
 }
 
 public void makeMoney(){
  this.product.beProducted();
  this.product.beSelled();
 }
}


房子也是產品不是嗎?

public class House extends Product {
 @Override
 public void beProducted() {
  System.out.println("生產出的房子是這樣的...");
 }
 @Override
 public void beSelled() {
  System.out.println("生產出的房子賣出去了....");
 }
}


IPod,高大上呀!
public class IPod extends Product {
 @Override
 public void beProducted() {
  System.out.println("生產出的ipod是這樣的");
 }
 @Override
 public void beSelled() {
  System.out.println("生產的IPod賣出去了");
 }
}


房地產公司只和房子打交道
public class HouseCorp extends Corp {
 public HouseCorp(House _house) {
  super(_house);
 }
 @Override
 public void makeMoney() {
  super.makeMoney();
  System.out.println("房地產公司賺大錢了");
 }
}


山寨公司什麼產品都賣
public class ShanZhaiCorp extends Corp {
 public ShanZhaiCorp(Product _product) {
  super(_product);
 }
 @Override
 public void makeMoney() {
  super.makeMoney();
  System.out.println("我是山寨,我賺錢呀");
 }
}


場景測試

public static void main(String[] args) {
  System.out.println("房地產公司是這樣運行的");
  House house=new House();
  HouseCorp houseCorp=new HouseCorp(house);
  houseCorp.makeMoney();
 
  System.out.println();
 
  System.out.println("山寨公司是這樣運行的");
  ShanZhaiCorp shanZhaiCorp=new ShanZhaiCorp(new IPod());
  shanZhaiCorp.makeMoney();
 }

瞧瞧人家山寨公司,什麼東西流行就生產什麼,反正價格低,質量嘛也有那麼一點點保證。


優點 
    抽象和實現分離
    擴充能力
    
注意事項
    主要考慮如何拆分抽象和實現

我是菜鳥,我在路上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章