设计模式_桥梁模式


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

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


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

我是菜鸟,我在路上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值