将抽象和行为部分分离,使它们都可以独立变化。
抽象和行为划分开来,各自独立,但又能动态的结合,从而可以满足多维度的变化。
比如,一个需求:coffee可以有大杯,中杯,小杯,同时又可以有各种不同的风味。大杯,中杯或小杯属于coffee的量,是coffee的抽象的属性,而加风味则是属于行为。这些抽象的东西和行为又是可以组合的,如果抽象和行为不分开,则对于每一中组合,都需要一个子类来实现,而且子类中会有很多重复代码。反之,如果把抽象和行为分开,进行组合,从而可以减少子类的数量。如果不把抽象和行为分开,在这个例子中就需要9个实现类来实现上面的需求。
如果用bridge,如下图,则用6个子类就可以到达9种组合:
如何实现?
使用Bridge模式后,我们需要将抽象和行为分开,风味配置属于行为,我们将它们抽象成一个专门的行为接口.
先看看抽象部分的接口代码:
public abstract class Coffee Int volume; String flavor; public abstract Coffee setFlavorImpl(CoffeeFlavor impl); |
其中CoffeeImp 是加不加奶的行为接口,看其代码如下:
public interface CoffeeFlavor { public void setFlavor(); } |
现在我们有了一个抽象类和接口,下面我们分别对其进行继承,实现concrete class:
//大杯 //...... } |
下面是对行为的实现:
public class AppleFlavor implements CoffeeFlavor } |