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.利用桥接模式获取数据,数据源来自于不同的数据库