动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

30天自动登录
微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

Java桥接模式

03-29 16:59 381浏览
举报 T字号
  • 大字
  • 中字
  • 小字

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

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

1.未使用桥接

首先,我们有两个基础接口: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");
    }

}

2.使用桥接

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

中国桥

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 ChineseArchitectbuil a ChinaBridge =======
this is a ChineseArchitectbuild a USBridge =======
this is a USArchitect
build a USBridge

总结:

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

0人推荐
共同学习,写下你的评论
0条评论
我是码农
程序员我是码农

25篇文章贡献87343字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

代码小兵66904-21 20:01

6道经典算法面试题

杨晶珍05-12 16:39

简述Spring MVC的核心组件

代码小兵49806-11 16:26

SpringMVC 中的组件

代码小兵49806-11 16:28

Spring常见面试题

代码小兵92504-17 16:07

发评论

举报

0/150

取消