桥接模式(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();

	}

}


posted @ 2015-02-03 13:16  qz程程  阅读(207)  评论(0编辑  收藏  举报