桥梁模式的目的是为同一个抽象化角色提供不同的实现
桥接模式的魅力在于将抽象和实现解耦,从而使两者可以相对独立变化,互不影响。
软件设计莫的初衷就是为了解决软件复用、内聚、耦合等问题,在类与类之间,应该尽量使用弱关联的关系,如果两个类
的确关联非常紧密,则使用继承的强关联关于,一般情况下,要尽量避免使用高耦合度的设计方式,这样不利于软件结构的扩展。
桥接设计模式中类的抽象及实现都应该能以通过生成子类的方法加以扩充,我们不必担心软件系统的升级和扩展会给原有系统造成不稳定的因素。
使用场合
1.不希望在抽象类和它的实现部分之间有一个固定的绑定关系
2.类的抽象及实现都应该可以通过生成子类的方法加以扩充
3.对一个抽象的实现部分的修改应该对客户不产生影响,即客户的代码不必重新编译
用法举例:
代码:
/**
* 电灯接口
* @author chengyi
*
*/
public interface Light {
public void light();
public void stopLight();
}
/**
* 普通电灯
* @author chengyi
*
*/
public class NormalLight implements Light {
public void light() {
System.out.println("点亮普通电灯");
}
public void stopLight() {
System.out.println("关闭普通电灯");
}
}
/**
* 多彩电灯
* @author chengyi
*
*/
public class MoreColorLight implements Light {
public void light() {
System.out.println("点亮多彩色电灯");
}
public void stopLight() {
System.out.println("关闭多彩色电灯");
}
}
/**
* 基本开关
* @author chengyi
*
*/
public class BaseSwitch {
private Light light;
public BaseSwitch(Light light) {
super();
this.light = light;
}
/**
* 打开电灯
*/
public void turnOn(){
light.light();
}
/**
* 关闭电灯
*/
public void turnOff(){
light.stopLight();
}
}
/*
* 多种颜色电灯开关
*/
public class MoreColorLightSwitch extends BaseSwitch {
public MoreColorLightSwitch(Light light) {
super(light);
}
public void makeLightColor(int color){
if(color==1){
System.out.println("红色");
}else if(color==2){
System.out.println("蓝色");
}else{
System.out.println("绿色");
}
}
}
/**
* 客户端
* @author chengyi
*
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
BaseSwitch baseSwitch = new BaseSwitch(new NormalLight());
baseSwitch.turnOn();
baseSwitch.turnOff();
MoreColorLightSwitch moreSwitch = new MoreColorLightSwitch(new MoreColorLight());
moreSwitch.turnOn();
moreSwitch.makeLightColor(1);
moreSwitch.turnOff();
}
}
运行结果:
点亮普通电灯
关闭普通电灯
点亮多彩色电灯
红色
关闭多彩色电灯