Java设计模式 (7) 桥接

本文通过电视与遥控器的例子,深入浅出地介绍了桥接模式。桥接模式适用于后期业务需要大规模扩展的情况,通过双层抽象与分离的方式简化后期维护。与适配器模式不同,桥接模式应在开发初期设计。文章提供了具体的代码实现,展示了如何创建通用型遥控器。

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

桥接模式

该模式适合后期业务需要大规模的扩展的情况
如果单纯的使用继承来做则非常复杂,桥接模式则利用双层抽象与分离的方式,使后期维护变得简单

该模式和适配器那种亡羊补牢的方式不同,它应在开发时就被设计

// 本例用电视与遥控器来解释桥接模式
//
// 电视的抽象 与 两种电视的实现类
interface ITv {
    void on();
    void off();
}

class SonyTv implements ITv {
    @Override public void on() {
        System.out.println("Sony Tv on!");
    }
    @Override public void off() {
        System.out.println("Sony Tv off!");
    }
}

class LGTv implements ITv {
    @Override public void on() {
        System.out.println("LG Tv on!");
    }
    @Override public void off() {
        System.out.println("LG Tv off!");
    }
}


// 遥控器抽象, 其中包括对TV的引用
// 它可以接受任何品牌的电视,并可以进行开/关操作
abstract class RemoteController {
    protected ITv tv;

    public RemoteController(ITv tv) {
        this.tv = tv;
    }

    public void on() {
        tv.on();
    }
    public void off() {
        tv.off();
    }
}


// 此时,小米想做一个所有电视的通用型遥控器
// 使用前只需要拥有一台对应的电视(对象),然后让遥控器配对一次即可(构造)
class MiRemoteController extends RemoteController {

    public MiRemoteController(ITv tv) {
        super(tv);
    }
}

// 测试
// Test Bridge Pattern
public class main {
    public static void main(String[] argv) {
        // 配对索尼电视
        RemoteController miSonyRemoteControl = new MiRemoteController(new SonyTv());
        // 操作
        miSonyRemoteControl.on();
        miSonyRemoteControl.off();

        // 配对LG电视
        RemoteController miLGRemoteControl = new MiRemoteController(new LGTv());
        // 操作
        miLGRemoteControl.on();
        miLGRemoteControl.off();
    }
}


/*
输出:
    Sony Tv on!
    Sony Tv off!
    LG Tv on!
    LG Tv off!
*/

转载于:https://my.oschina.net/tasker/blog/812479

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值