桥接模式:在软件系统中如果某些类由于自身的逻辑,需要在多个维度上拓展,这个时候可以使用桥接模式来实现。
将抽象化和实现化脱耦。
下面举一个 开关控制电灯的例子。
(1)首先创建一个开关基类
package com.demo.dp.bridge;
public abstract class AbstractBaseSwitch {
private ILight light;
public AbstractBaseSwitch(ILight light) {
this.light = light;
}
public void turnOn(){
light.lightOn() ;
light.light() ;
}
public void turnOff(){
light.light() ;
light.lightOff() ;
}
}
(2)创建一个电灯接口
package com.demo.dp.bridge; public interface ILight { //打开点灯 void lightOn() ; //关闭电灯 void lightOff() ; //电灯亮着光 void light() ; }
(3)创建一个普通开关package com.demo.dp.bridge; public class NormalSwitch extends AbstractBaseSwitch{ public NormalSwitch(ILight light) { super(light); } @Override public void turnOn() { System.out.println("----普通开关-----"); super.turnOn(); } @Override public void turnOff() { System.out.println("----普通开关-----"); super.turnOff(); } }
(4)创建一个远程遥控开关package com.demo.dp.bridge; public class RemoteSwitch extends AbstractBaseSwitch{ public RemoteSwitch(ILight light) { super(light); } @Override public void turnOn() { System.out.println("----遥控开关----"); super.turnOn(); } @Override public void turnOff() { System.out.println("----遥控开关----"); super.turnOff(); } }
(5)创建一个普通电灯package com.demo.dp.bridge; public class ElectricLight implements ILight{ @Override public void light() { System.out.println("电灯在亮着光"); } @Override public void lightOff() { System.out.println("电灯被关闭了"); } @Override public void lightOn() { System.out.println("电灯被打开了"); } }
(6)创建一个霓虹灯(7)创建一个测试类package com.demo.dp.bridge; public class NeonLight implements ILight{ @Override public void light() { System.out.println("霓虹灯在亮着光"); } @Override public void lightOff() { System.out.println("霓虹灯被关闭了"); } @Override public void lightOn() { System.out.println("霓虹灯被打开了"); } }
输出结果:package com.demo.dp.bridge; /** * * @author PC_JingLe * * 桥接模式:让抽象化和实现化 "脱耦",使两者可以独立变化 */ public class Client { public static void main(String[] args) { //创建一个电灯 ILight electricLight = new ElectricLight() ; //创建一个霓虹灯 ILight neonLight = new NeonLight() ; //创建一个普通开关 控制电灯 AbstractBaseSwitch normalSwitch = new NormalSwitch(electricLight) ; //普通开关控制电灯 打开 normalSwitch.turnOn() ; //普通开关控制电灯关闭 normalSwitch.turnOff() ; //创建一个远程遥控开关 控制霓虹灯 AbstractBaseSwitch remoteSwitch = new RemoteSwitch(neonLight) ; //远程遥控开关控制霓虹灯 打开 remoteSwitch.turnOn() ; //远程遥控开关控制霓虹灯关闭 remoteSwitch.turnOff() ; } }
----普通开关----- 电灯被打开了 电灯在亮着光 ----普通开关----- 电灯在亮着光 电灯被关闭了 ----遥控开关---- 霓虹灯被打开了 霓虹灯在亮着光 ----遥控开关---- 霓虹灯在亮着光 霓虹灯被关闭了
通过桥接模式,这样开关和灯之间的关系可以向两个维度上拓张,可以任何一个开关去控制各种各样的灯。