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