标签:
设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要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