Bridge 模式

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

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

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

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

 Bridge 模式_第1张图片

如何实现?
使用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

   }
}

 

你可能感兴趣的:(apple,String,Class,interface)