桥接模式是将抽象部分 与实现部分 分离,可实现两部分的组合使用。
例如 遥控器 (抽象部分)与 设备(实现部分 电视,空调等)。遥控器调用的是 设备方实现的接口。
设计模式,一定要敲代码理解
抽象模版(遥控器)
java
/**
* @author ggbond
* @date 2024年04月05日 16:43
*/
public abstract class Controller {
protected Machine machine;
public Controller(Machine machine) {
this.machine = machine;
}
//控制器(遥控 开机 )
public abstract void cStart();
//控制器(遥控 机器设备中 一些参数大小 )
public abstract void vUp();
public abstract void vdown();
}
抽象实体1(电视遥控器)
java
/**
* @author ggbond
* @date 2024年04月05日 16:58
*/
public class TVController extends Controller{
public TVController(Machine machine) {
super(machine);
}
@Override
public void cStart() {
this.machine.start();
}
@Override
public void vUp() {
this.machine.setVolume(10);
}
@Override
public void vdown() {
this.machine.setVolume(0);
}
//自己可扩展设备接口
public void start(){
System.out.println("通过遥控器开启电视机");
cStart();
}
}
抽象实体2(空调遥控器)
java
/**
* @author ggbond
* @date 2024年04月05日 16:57
*/
public class AirController extends Controller{
public AirController(Machine machine) {
super(machine);
}
@Override
public void cStart() {
this.machine.start();
}
@Override
public void vUp() {
this.machine.setVolume(10);
}
@Override
public void vdown() {
this.machine.setVolume(0);
}
//自己可扩展设备接口
public void start(){
System.out.println("通过遥控器开启空调");
cStart();
}
}
实现模版
java
/**
* @author ggbond
* @date 2024年04月05日 16:44
* 实现层次 (例如 下面机器)
*/
public abstract class Machine {
public abstract void start();
public abstract void shutdown();
public abstract void setVolume(int value);
}
实现实体1(电视)
java
/**
* @author ggbond
* @date 2024年04月05日 16:54
* 设备实体-电视
*/
public class TV extends Machine{
@Override
public void start() {
System.out.println("TV 开机");
}
@Override
public void shutdown() {
System.out.println("TV 关机");
}
@Override
public void setVolume(int value) {
System.out.println("TV 设置 声音大小");
}
}
实现实体2(空调)
java
/**
* @author ggbond
* @date 2024年04月05日 16:56
* 设备实体-空调
*/
public class AirConditioning extends Machine{
@Override
public void start() {
System.out.println("空调 开机");
}
@Override
public void shutdown() {
System.out.println("空调 关机");
}
@Override
public void setVolume(int value) {
System.out.println("空调设置温度大小");
}
}
调用测试与结果
java
/**
* @author ggbond
* @date 2024年04月05日 17:12
*/
public class Main {
public static void main(String[] args) {
Controller c1=new AirController(new AirConditioning());
Controller c2=new TVController(new TV());
c1.cStart();//调用 实现层 空调的接口 启动空调。 结果;空调 开机
c2.cStart();//调用 实现层 电视的接口 启动电视。 结果;TV 开机
}
}
总结
适合 抽象部分 与 实现部分有多种方式 组合。 如 不同种遥控器 调用 对应的设备功能。满足单一与开闭原则。