设计模式_桥梁模式


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();
 }

瞧瞧人家山寨公司,什么东西流行就生产什么,反正价格低,质量嘛也有那么一点点保证。


优点 
    抽象和实现分离
    扩充能力
    
注意事项
    主要考虑如何拆分抽象和实现

我是菜鸟,我在路上。

你可能感兴趣的:(design,patterns)