您的位置:首页 > 其它

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

2016-10-14 15:08 363 查看
介绍:将抽象部分与实现部分分离,使他们都可以独立地变化。这个设计使用多态实现

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

一、未使用桥接

首先,我们有两个基础接口: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息