1.桥接模式测试类(简化版)
public class BridgePattenMyDriverDemo { public static void main(String[] args) { MyDriverManager myDriver = new MyDriverManager(); // 根据条件注册数据库驱动(通常是根据配置文件 这里简单调用一下) // 这里假设注册的是AbcJdbc驱动 AbcJdbc abcJdbc = new AbcJdbc(); myDriver.registerDriver(abcJdbc); myDriver.connect(); // 这里假设注册的是MyDMJdbc驱动 MyDMJdbc myDMJdbc = new MyDMJdbc(); myDriver.registerDriver(myDMJdbc); myDriver.connect(); } }
2.driver 接口
public interface MyDriverInterface { void connect(); }
3.driver具体实现
public class AbcJdbc implements MyDriverInterface{ @Override public void connect() { System.out.println(" 欢迎使用 Abc JDBC 连接数据库 "); } }
public class MyDMJdbc implements MyDriverInterface{ @Override public void connect() { System.out.println(" 欢迎使用 MYDM 连接数据库... "); } }
public class MyKingBaseJdbc implements MyDriverInterface{ @Override public void connect() { System.out.println(" 欢迎使用 MYKingBase 连接数据库... "); } }
4.桥接扩展类
public class MyDriverManager { // 定义一个接口,用于与具体的数据库驱动交互 private MyDriverInterface driver; // 定义一个方法,用于注册数据库驱动 public void registerDriver(MyDriverInterface driver) { this.driver = driver; } public void connect() { driver.connect(); } }
5.桥接模式和策略模式
回忆一下之前的策略模式,发现这个代码和策略模式很像呢。那他们的区别是啥呢?
桥接模式与策略模式的主要区别
-
目的:
- 桥接模式:用于将抽象与其实现解耦,以便它们可以独立变化。通常在需要将多个抽象类和多种实现类组合的情况下使用。
- 策略模式:用于封装一系列可互换的算法,允许客户端在运行时选择不同的算法,而不需要改变使用算法的代码。
-
结构:
- 桥接模式:涉及两个维度的变化(抽象和实现),通常有抽象类、实现接口和具体实现类。
- 策略模式:主要集中在算法的变化,通常涉及策略接口和多个具体策略类。
-
使用场景:
- 桥接模式:适用于类层次结构较大,可能需要多种实现时。
- 策略模式:适用于需要多种算法选择的场景,例如排序、过滤等操作。
6.鲜明版
由于上面代码 桥接模式的特性体现的还不够鲜明。我们再来看下面的例子
1.桥接模式示例类
public class BridgePattenDemo { /** * 主函数 * 这段代码实现了桥接模式(Bridge Pattern), * 主要功能是在不同的控制设备(如智能遥控器和智能手机)与不同的被控制对象(如电视和音响)之间建立灵活的关系。 * 通过封装控制器和设备之间的关系,允许他们独立地变化。 * 使得用户可以使用不同的智能设备控制不同类型的家用电器,而不是将控制逻辑硬编码到每个设备中。 * 这种设计提高了代码的可扩展性和灵活性,使得在未来可以方便地增加新的控制设备或家电设备。 * @param args */ public static void main(String[] args) { // 实例化智能控制器,使用 智能遥控器 控制 电视 //这里其实就是实现了桥接模式中的“桥”。 Control control = new SmartController(new Television()); control.turnOn(); control.turnOff(); // 实例化智能控制器,使用 智能手机 控制 音响 control = new SmartPhone(new SoundSystem()); control.turnOn(); control.turnOff(); } }
2.智能设备接口
public interface SmartDevice { void turnOn(); void turnOff(); }
3.智能设备具体实现
public class Television implements SmartDevice { @Override public void turnOn() { System.out.println(" Television is turned on. "); } @Override public void turnOff() { System.out.println(" Television is turned off. "); } }
public class SoundSystem implements SmartDevice{ @Override public void turnOn() { System.out.println(" SoundSystem is on. "); } @Override public void turnOff() { System.out.println(" SoundSystem is off. "); } }
4.控制器抽象类
public abstract class Control { protected SmartDevice smartDevice; protected Control(SmartDevice smartDevice) { this.smartDevice = smartDevice; } public abstract void turnOn(); public abstract void turnOff(); }
5.控制器具体扩展类
public class SmartController extends Control { public SmartController(SmartDevice smartDevice) { super(smartDevice); } @Override public void turnOn() { System.out.println(" 使用智能遥控器打开设备..."); smartDevice.turnOn(); } @Override public void turnOff() { System.out.println(" 使用智能遥控器关闭设备..."); smartDevice.turnOff(); } }
public class SmartPhone extends Control { public SmartPhone(SmartDevice smartDevice) { super(smartDevice); } @Override public void turnOn() { System.out.println(" 使用智能手机打开设备..."); smartDevice.turnOn(); } @Override public void turnOff() { System.out.println(" 使用智能手机关闭设备..."); smartDevice.turnOff(); } public void otherFunction() { System.out.println(" 智能手机的其他功能..."); } }