java-设计模式(结构型)-【桥接模式】

1.桥接模式(Bridge)

  定义:桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。

          桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化

  使用场景:出现两个类或以上个类时,通过桥接模式来让它们相关联,而保持自身的变化

 2.举例:咖啡杯(大的,小的)和饮料(水,牛奶)

   有两个类:咖啡杯和饮料。

   使用桥接模式:让不同的咖啡杯可以装不同的饮料。

   2.1 图解

 

   2.2 饮料

//饮料接口:
public interface Fluid {
    
	void pourFluid();
}
//牛奶类
class Milk implements Fluid
{
    @Override
	public void pourFluid() {
		// TODO Auto-generated method stub
		System.out.println("倒牛奶");
	}	
}
//水类
class Water implements Fluid
{

	@Override
	public void pourFluid() {
		// TODO Auto-generated method stub
	   System.out.println("倒水");	
	}
}

 2.3 桥接类

//桥接类:持有饮料接口,并可以设置不同的饮料
public class Bridge  implements Fluid{
    
    private Fluid fluid=null;
    @Override
	public void pourFluid() {
		// TODO Auto-generated method stub
		fluid.pourFluid();
	}
    public Fluid getFluid() {
		return fluid;
	}
	public void setFluid(Fluid fluid) {
		this.fluid = fluid;
	}
}

  2.4 咖啡类

//咖啡:持有桥接类
public abstract class Coffee {

	private Bridge bridge=new Bridge();
	public abstract void pourCoffee();
	
	public Bridge getBridge() {
		return bridge;
	}

	public void setBridge(Bridge bridge) {
		this.bridge = bridge;
	}

}
//大的咖啡杯
class LargeCoffee2 extends Coffee
{   
	@Override
	public void pourCoffee() {
		// TODO Auto-generated method stub
		System.out.println("大的咖啡杯");
	    //调用桥接类获取饮料源
		getBridge().pourFluid();
	}
}
class SmallCoffee2 extends Coffee
{
    @Override
	public void pourCoffee() {
		// TODO Auto-generated method stub
		System.out.println("小的咖啡杯");
	    //调用桥接类获取饮料源
        getBridge().pourFluid();
	}
}

  2.5 测试

public class Test {

	public static void main(String[] args) {
		 //设置两种饮料
		 Fluid milk=new Milk();
		 Fluid water=new Water();
		 //设置咖啡杯
		 Coffee l2=new LargeCoffee2();
		 //桥接桥
		 Bridge bd=new Bridge();
		 bd.setFluid(milk);
		 //为咖啡杯设置桥
		 l2.setBridge(bd);
		 //倒咖啡:
		 l2.pourCoffee();
		 //重新设置饮料源:
		 bd.setFluid(water);
		 l2.pourCoffee();
	}
}

  2.6 运行结果

大的咖啡杯
倒牛奶
大的咖啡杯
倒水

  3.利用桥接模式获取数据,数据源来自于不同的数据库

 

 

posted @ 2015-04-17 11:44  beyondbycyx  阅读(284)  评论(0编辑  收藏  举报