Bridge 模式

将抽象和行为部分分离,使它们都可以独立变化。

抽象和行为划分开来,各自独立,但又能动态的结合,从而可以满足多维度的变化。

比如,一个需求:coffee可以有大杯,中杯,小杯,同时又可以有各种不同的风味。大杯,中杯或小杯属于coffee的量,是coffee的抽象的属性,而加风味则是属于行为。这些抽象的东西和行为又是可以组合的,如果抽象和行为不分开,则对于每一中组合,都需要一个子类来实现,而且子类中会有很多重复代码。反之,如果把抽象和行为分开,进行组合,从而可以减少子类的数量。如果不把抽象和行为分开,在这个例子中就需要9个实现类来实现上面的需求。

如果用bridge,如下图,则用6个子类就可以到达9种组合:

 

如何实现?
使用Bridge模式后,我们需要将抽象和行为分开,风味配置属于行为,我们将它们抽象成一个专门的行为接口.

先看看抽象部分的接口代码:

public abstract class Coffee
{
   CoffeeFlavor coffeeFlavorImpl;

        Int volume;

        String flavor;

        public abstract Coffee setFlavorImpl(CoffeeFlavor impl);
    public abstract Coffee getACupOfCoffee();
}

 

其中CoffeeImp 是加不加奶的行为接口,看其代码如下:

public interface CoffeeFlavor
{
   public void setFlavor();
}

现在我们有了一个抽象类和接口,下面我们分别对其进行继承,实现concrete class:

//大杯
public class LargeSizeCoffee extends Coffee
{
   public void setFlavorImpl(){

          //......

      }

   public Coffee getACupOfCoffee()
   {
     getCoffeeImp().setFlavor();
     //setVolume()...... Large size
    }
  
   }
}

下面是对行为的实现:

public class AppleFlavor implements CoffeeFlavor
{
   FragrantCoffeeImp() {}

   public void setFlavor()
   {
     //set apple flavor

   }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值