桥接模式的用意是将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化
概念的东西到此为止,举个例子,假设汽车有2种行驶状态,100km/h高速行驶和10km/h低速行驶,现在有10种汽车,都必须实现这2种状态,有一种方法是,每种汽车都写一个“高速行驶”和“低速行驶”的方法,但是如果有100种行驶状态100种汽车呢,那写下去可就。。。所以,桥接模式就是为了解决这种问题,将抽象和实现分离,类似spring的aop
定义一个行驶的接口
package bridge; public interface IRun { public void run(); }
package bridge; public class HighSpeedRun implements IRun { @Override public void run() { System.out.println("以100km/h的速度高速行驶中"); } }
package bridge; public class LowSpeedRun implements IRun { @Override public void run() { System.out.println("以10km/h的速度低速行驶中"); } }
package bridge; public class Car { private IRun run; public IRun getRun() { return run; } public void setRun(IRun run) { this.run = run; } public void run(){ this.run.run(); } }
package bridge; public class Truck extends Car { @Override public void run() { System.out.print("卡车鸣着喇叭"); super.run(); } }
package bridge; public class Bus extends Car { @Override public void run() { System.out.print("巴士闪着车前灯"); super.run(); } }
package bridge; public class MainRun { /** * bridge 桥接模式 * @author 7FisH */ public static void main(String[] args) { HighSpeedRun hsr = new HighSpeedRun(); LowSpeedRun lsr = new LowSpeedRun(); Truck truck = new Truck(); Bus bus = new Bus(); truck.setRun(hsr); truck.run(); System.out.println("================================================================="); truck.setRun(lsr); truck.run(); System.out.println("================================================================="); bus.setRun(hsr); bus.run(); System.out.println("================================================================="); bus.setRun(lsr); bus.run(); System.out.println("================================================================="); } }结果:
卡车鸣着喇叭以100km/h的速度高速行驶中
=================================================================
卡车鸣着喇叭以10km/h的速度低速行驶中
=================================================================
巴士闪着车前灯以100km/h的速度高速行驶中
=================================================================
巴士闪着车前灯以10km/h的速度低速行驶中
=================================================================
以上为个人理解,不对之处,还望帮忙指出