桥接模式Demo

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.桥接模式和策略模式

回忆一下之前的策略模式,发现这个代码和策略模式很像呢。那他们的区别是啥呢?

桥接模式与策略模式的主要区别

  1. 目的:

    • 桥接模式:用于将抽象与其实现解耦,以便它们可以独立变化。通常在需要将多个抽象类和多种实现类组合的情况下使用。
    • 策略模式:用于封装一系列可互换的算法,允许客户端在运行时选择不同的算法,而不需要改变使用算法的代码。
  2. 结构:

    • 桥接模式:涉及两个维度的变化(抽象和实现),通常有抽象类、实现接口和具体实现类。
    • 策略模式:主要集中在算法的变化,通常涉及策略接口和多个具体策略类。
  3. 使用场景:

    • 桥接模式:适用于类层次结构较大,可能需要多种实现时。
    • 策略模式:适用于需要多种算法选择的场景,例如排序、过滤等操作。

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(" 智能手机的其他功能...");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值