桥接模式(Bridge)
桥接模式,就是把向多个方向发展的变化由继承的实现变为了耦合的实现。
package mode.bridge.test; /** * * 首先是一个抽象的咖啡类,有一个抽象的倒咖啡的方法 * * 在这个类中有一个咖啡伴侣的属性,为什么会有这个属性。因为我们在冲咖啡的时候可能加入不同种类的咖啡伴侣,也可能冲大杯的和小杯的咖啡。 * 这样我们的咖啡就有了两个方向的变化,大小和咖啡伴侣类型。我们的咖啡类控制自己的大小,那么就将咖啡伴侣的类型交给其他类去控制,而将控制 * 伴侣的类变为自己的一个属性。 这样就把继承变成了耦合 这样我们就不必头疼通过继承去实现时成指数级增加的工作量了 * * */ public abstract class CoffeeTest { //要在子类中使用,所以定义为protected protected CoffeeImpTest coffeeImpTest; public void setCoffeeImpTest(CoffeeImpTest coffeeImpTest) { this.coffeeImpTest = coffeeImpTest; } public abstract void pourCoffee(); }
package mode.bridge.test; /** * * 控制咖啡伴侣的类,有一个加咖啡伴侣的方法 * * */ public abstract class CoffeeImpTest { public abstract void pouerCoffeeImp(); }
package mode.bridge.test; /** * *加清香型伴侣 * * */ public class CoffeeImpTestFragrant extends CoffeeImpTest { @Override public void pouerCoffeeImp() { System.out.println("清香型咖啡伴侣"); } }
package mode.bridge.test; /** * * 加奶香型伴侣 * * */ public class CoffeeImpTestMilk extends CoffeeImpTest { @Override public void pouerCoffeeImp() { System.out.println("奶香型咖啡伴侣"); } }
package mode.bridge.test; /** * * 弄一大杯咖啡 * * */ public class CoffeeTestBig extends CoffeeTest { @Override public void pourCoffee() { System.out.print("冲了大杯咖啡" + "伴侣是:"); //加入自己喜欢的伴侣 this.coffeeImpTest.pouerCoffeeImp(); } }
package mode.bridge.test; /** * * 弄一小杯咖啡 * * */ public class CoffeeTestSmall extends CoffeeTest { @Override public void pourCoffee() { System.out.print("冲了小杯咖啡" + " 咖啡伴侣是:"); //加入自己喜欢的伴侣 this.coffeeImpTest.pouerCoffeeImp(); } }
package mode.bridge.test; /** * * * 在测试中我们可以冲大杯、小杯的咖啡,并且可以随意加入我们喜欢的伴侣了 * * */ public class Test { public static void main(String[] args) { // 来一大杯咖啡 CoffeeTest coffBig = new CoffeeTestBig(); // 来一小杯咖啡 CoffeeTest coffSmall = new CoffeeTestSmall(); // 大杯的咖啡我想加奶香型的咖啡伴侣 coffBig.setCoffeeImpTest(new CoffeeImpTestMilk()); coffBig.pourCoffee(); // 小杯的咖啡我想加清香型的咖啡伴侣 coffSmall.setCoffeeImpTest(new CoffeeImpTestFragrant()); coffSmall.pourCoffee(); } }