结构型模式-桥接模式(Bridge)

本文通过手机设计实例,详细解释了桥接模式的概念,即通过解耦抽象和实现,降低类之间的耦合度,简化代码维护。示例展示了如何使用接口和聚合来实现不同品牌和手机样式的组合,避免类爆炸问题。当新增手机类型时,只需创建相应类,体现了桥接模式的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念:将抽象和实现解耦,使得两者都可以独立变化

一个例子:以手机为例,手机有翻盖式的,有推拉式的还有直板式的,而手机的品牌又多种多样,如果我们将每一种手机样式和品牌组合,那么就需要创建非常多的类很容易发生类爆炸问题,比如小米翻盖手机、小米推拉式手机、小米直板式手机……华为翻盖手机、华为推拉式手机等等等等,如果我们为每一种都创建一个类,这样做就会造成我们的项目中需要维护的对象大量冗余,维护成本也随之提高,而且实际上这些种类往往是无比繁多的。

简单理解:桥接将继承转为关联,降低类之间的耦合度,减少代码量(多个分类之间组合)

直接上代码:

(1)创建一个品牌接口,用于展示logo

public interface Brand {

    public void showLogo();
}

(2)创建一些品牌,实现上述接口

public class MiBrand implements Brand{
    @Override
    public void showLogo() {
        System.out.println("【Brand Mi】小米:为发烧而生");
    }
}
public class HuaweiBrand implements Brand{
    @Override
    public void showLogo() {
        System.out.println("【Brand HUEWEI】华为:你的Mate,自带光环。");
    }
}

(3)创建一个手机抽象类,手机应该有自己的开关机logo画面,所以要跟刚刚创建的品牌做关联,使用聚合的方式。手机得有自己的开关机功能吧,所以声明两个抽象方法。

public abstract class Phone {
    protected Brand brand;
    public Phone(Brand brand) {
        this.brand = brand;
    }
    // 开机
    public abstract void open();
    // 关机
    public abstract void close();
}

(4)创建一个折叠手机类,继承手机抽象类,具体开关机要怎样的logo就在方法的实现做逻辑处理。

// 折叠手机
public class FoldedPhone extends Phone{

    public FoldedPhone(Brand brand) {
        super(brand);
    }

    @Override
    public void open() {
        brand.showLogo(); // 开机时展示logo
        System.out.println("折叠手机-开机");
    }

    @Override
    public void close() {
        brand.showLogo(); // 关机时展示logo
        System.out.println("折叠手机-关机");
    }
}

(5)创建客户端测试

public class Client {
    public static void main(String[] args) {
        Brand huawei = new HuaweiBrand();
        Phone phone = new FoldedPhone(huawei);
        phone.open();
        phone.close();
        System.out.println("=============");
    }
}
折叠手机-开机
【Brand HUEWEI】华为:你的Mate,自带光环。
折叠手机-关机
=============

此时分析一下,如果还有一种类型的手机(曲面屏手机)呢,应怎么处理?此时应加一个类即可,继承Phone

(6)创建曲面屏手机类,继承phone

public class QMPhone extends Phone{
    public QMPhone(Brand brand) {
        super(brand);
    }

    @Override
    public void open() {
        brand.showLogo(); // 开机时展示logo
        System.out.println("曲面手机-开机");
    }

    @Override
    public void close() {
        brand.showLogo(); // 关机时展示logo
        System.out.println("曲面手机-关机");
    }
}

(7)添加客户端代码测试

package com.ctsi.bridge;

public class Client {
    public static void main(String[] args) {
        Brand huawei = new HuaweiBrand();
        Phone phone = new FoldedPhone(huawei);
        phone.open();
        phone.close();
        System.out.println("=============");
        // 曲面手机
        Brand xiaomi = new MiBrand();
        Phone phone1 = new QMPhone(xiaomi);
        phone1.open();
        phone1.close();

    }
}
【Brand HUEWEI】华为:你的Mate,自带光环。
折叠手机-开机
【Brand HUEWEI】华为:你的Mate,自带光环。
折叠手机-关机
=============
【Brand Mi】小米:为发烧而生
曲面手机-开机
【Brand Mi】小米:为发烧而生
曲面手机-关机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值