桥接模式,就是把向多个方向发展的变化由继承的实现变为了耦合的实现。
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();
}
}