标签:
设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:
对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥接模式的应用。(我喜欢叫他拼凑模式,先抽取共同点,然后用共同点去拼凑)
桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
抽象车
public abstract class AbstractCar {
protected Transmission gear;
public abstract void run();
public void setTransmission(Transmission gear) {
this.gear = gear;
}
}public class BMWCar extends AbstractCar{ private static final Logger LOG = LoggerFactory.getLogger(BMWCar.class); public void run() { gear.gear(); LOG.info("BMW is running"); }; }BenZCar
public class BenZCar extends AbstractCar{
private static final Logger LOG = LoggerFactory.getLogger(BenZCar.class);
@Override
public void run() {
gear.gear();
LOG.info("BenZCar is running");
};
}public abstract class Transmission{
public abstract void gear();
}手动档public class Manual extends Transmission {
private static final Logger LOG = LoggerFactory.getLogger(Manual.class);
@Override
public void gear() {
LOG.info("Manual transmission");
}
}public class Auto extends Transmission {
private static final Logger LOG = LoggerFactory.getLogger(Auto.class);
@Override
public void gear() {
LOG.info("Auto transmission");
}public class BridgeClient {
public static void main(String[] args) {
Transmission auto = new Auto();
AbstractCar bmw = new BMWCar();
bmw.setTransmission(auto);
bmw.run();
Transmission manual = new Manual();
AbstractCar benz = new BenZCar();
benz.setTransmission(manual);
benz.run();
}
}标签:
原文地址:http://blog.csdn.net/u013424496/article/details/51831398