Java-23个设计模式 Bridge桥接模式

Bridge

将抽象部分(业务功能)与它的实现部分分离(平台分离),使它们可以独立地变化。

① 创建软件与平台的接口SoftWareImpl(其实现类(iOS或者Android)会实现与软件连接的接口)

/**
 * 软件与平台的接口
 */
public interface SoftWareImpl {
    // 连接接口
    public void connect();
    // 声音接口
    public void voice();
}

② 创建Abstractin(这里指软件SoftWare,应为软件有精简版Lite和旗舰版Ultimate) 所以用抽象类

/**
 * 软件,有Android和iOS平台
 */
public abstract class SoftWare {
    // 多态指针指向impl,运行时根据传入的平台调用
    protected SoftWareImpl softWareImpl;
    // 构造方法,让子类动态传入平台对象
    public SoftWare(SoftWareImpl softWareImpl){
        this.softWareImpl = softWareImpl;
    }
    // 软件的功能,抽象方法
    public abstract void boom();

}

③ 创建iOS和Android平台实现类

// IOS平台连接配置
public class IOSSoftWareImpl implements SoftWareImpl {
    @Override
    public void connect() {
        System.out.println("连接上IOS系统");
    }

    @Override
    public void voice() {
        System.out.println("成功进行声音配置");
    }
}

 

// 安卓平台连接配置
public class AndroidSoftWareImpl implements SoftWareImpl {
    @Override
    public void connect() {
        System.out.println("连接上安卓系统");
    }

    @Override
    public void voice() {
        System.out.println("成功进行声音配置");
    }
}

④ 创建精简版和旗舰版具体类

/**
 * 精简版软件
 * 因为改软件本身有精简版和旗舰版,都需要用到软件的基本功能
 * 所以将SoftWareImpl提取到父类,父类通过构造函数传给子类
 */
public class Lite extends SoftWare {

    public Lite(SoftWareImpl softWareImpl) {
        super(softWareImpl);
    }

    @Override
    public void boom() {
        // 连接到指定平台,声音配置
        softWareImpl.connect();
        softWareImpl.voice();
        System.out.println("10秒后爆炸");
    }
}

// 旗舰版
public class Ultimate extends SoftWare {
    public Ultimate(SoftWareImpl softWareImpl) {
        super(softWareImpl);
    }

    @Override
    public void boom() {
        softWareImpl.connect();
        softWareImpl.voice();
        System.out.println("直接爆炸");
    }
}

⑤ 测试

public static void main(String[] args) {
        // 运行时装配
        // 创建安卓连接对象
        SoftWareImpl softWareImpl = new AndroidSoftWareImpl();
        // 创建软件精简版对象,把安卓放进去
        SoftWare softWare = new Lite(softWareImpl);
        softWare.boom();
    }


结果:
连接上安卓系统
成功进行声音配置
10秒后爆炸

场景:一般用在 " 两个非常强的变化维度,如例子中的软件版本和连接平台 ",多于两个变化维度,可用bridge扩展模式 

优点:Bridge模式解耦了抽象和实现之间固有的绑定关系,使抽象和实现可沿着各自的维度来变化,即子类化他们

           有时候类似于多继承方案,但是多继承往往违背单一职责原则(即一个类中只有一个变化的原因),复用性差

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值