一天一个设计模式---桥接模式

介绍:将抽象部分与实现部分分离,使他们都可以独立地变化。这个设计使用多态实现

场景:看到桥接模式,我先想到的是桥梁……所以我就举个桥梁的例子来说明。对于桥梁,有两种:中国桥和美国桥。对于建筑师,也有两种:中国建筑师和美国建筑师。首先,说下原来的业务,中国建筑师只会造中国桥,美国建筑师会造美国桥。但是中国建筑师牛逼啊,学会了美国桥的建造。如果没有使用桥接模式,可能代码上会有很多问题。

一、未使用桥接

首先,我们有两个基础接口:1.建筑师-负责建造,2.桥梁-被建造

建筑师

public interface Architect {
    public void build();
}

中国建筑师

public class ChineseArchitect implements Architect {

    @Override
    public void build() {
        System.out.println("this is a ChineseArchitect");
    }

}

桥梁

public interface Bridge {
    public void beBuild();
}

美国建筑师

public class USArchitect implements Architect {

    @Override
    public void build() {
        System.out.println("this is a USArchitect");
    }

}

中国桥

public class ChineseBridgeByChineseArchitect implements Bridge {

    @Override
    public void beBuild() {
        System.out.println("buil a ChinaBridge by ChineseArchitect");
    }

}

ps:后面的3中组合为了节省篇幅,这里就不再说明

二、使用桥接

这里有两种做法,桥梁绑定建筑师,或者建筑师绑定桥梁,我选择了桥梁绑定建筑师。

中国桥

public class ChineseBridge implements Bridge {

    private Architect architect;

    public ChineseBridge(Architect architect) {
        this.architect = architect;
    }

    @Override
    public void beBuild() {
        architect.build();
        System.out.println("buil a ChinaBridge");
    }

}

美国桥

public class USBridge implements Bridge {

    private Architect architect;

    public USBridge(Architect architect) {
        this.architect = architect;
    }

    @Override
    public void beBuild() {
        architect.build();
        System.out.println("build a USBridge");
    }

}

开始造桥

Architect cArchitect = new ChineseArchitect();
Architect uArchitect = new USArchitect();
Bridge ccbBridge = new ChineseBridge(cArchitect);
Bridge ucBridge = new USBridge(cArchitect);
Bridge uuBridge = new USBridge(uArchitect);

ccbBridge.beBuild();
System.out.println("=======");
ucBridge.beBuild();
System.out.println("=======");
uuBridge.beBuild();

输出示例

this is a ChineseArchitect
buil a ChinaBridge
=======
this is a ChineseArchitect
build a USBridge
=======
this is a USArchitect
build a USBridge

总结:
很好的体现了六大原则,保证模块的解耦,并且很方便扩展。我们这里如果需要扩展桥梁,只需要增加一个桥梁类。如果想要在维度上扩展,只需要在新的接口的具体实现类中添加桥梁类,并调用beBuild()方法即可。


更多模式:一天一个设计模式—分类与六大原则

更多源码: https://github.com/oDevilo/Java-Base

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值