【设计原则】
1、使用聚合关联,不使用继承关联;
2、抽象化层次和实现化层次脱耦。
【使用场合】
1、不希望在抽象类和它的实现部分之间有一个固定的绑定关系;
2、类的抽象及实现都应该可以通过生成子类的方法加以扩充;
3、对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
package demo.birdge.lights; public interface ILight { //接通电源 public void electricConnected(); //照明 public void light(); //断开电源 public void electricClose(); }
package demo.birdge.lights.impl; import demo.birdge.lights.ILight; public class CrystalLight implements ILight { @Override public void electricConnected() { System.out.println("水晶灯被打开了..."); } @Override public void light() { System.out.println("水晶灯照明了!"); } @Override public void electricClose() { System.out.println("水晶灯被关闭了..."); } }
package demo.birdge.lights.impl; import demo.birdge.lights.ILight; public class IncandescentLight implements ILight { @Override public void electricConnected() { System.out.println("白炽灯被打开了..."); } @Override public void light() { System.out.println("白炽灯照明了!"); } @Override public void electricClose() { System.out.println("白炽灯被关闭了..."); } }
package demo.birdge.switchs; import demo.birdge.lights.ILight; public class BaseSwitch { protected ILight light; public BaseSwitch(ILight light){ this.light = light; } /** * 开灯方法 */ public final void makeLight(){ this.light.electricConnected(); this.light.light(); this.light.electricClose(); } }
package demo.birdge.switchs.sub; import demo.birdge.lights.ILight; import demo.birdge.switchs.BaseSwitch; public class RemoteControlSwitch extends BaseSwitch { public RemoteControlSwitch(ILight light) { super(light); } /** * 使用遥控器开关控制开灯 * @param operColor */ public final void makeRemoteLight (int operColor){ this.light.electricConnected(); this.light.light();; String color = ""; switch(operColor){ case 1: color = "暖色"; break; case 2: color = "蓝色"; break; case 3: color = "红色"; break; default: color ="白色"; break; } System.out.println("....现在是" + color +"!"); this.light.electricClose(); } }
package demo.birdge; import demo.birdge.lights.ILight; import demo.birdge.lights.impl.CrystalLight; import demo.birdge.lights.impl.IncandescentLight; import demo.birdge.switchs.BaseSwitch; import demo.birdge.switchs.sub.RemoteControlSwitch; public class ClientForBridge { public static void main(String[] args) { // TODO Auto-generated method stub ILight iLight = new IncandescentLight(); ILight cLight = new CrystalLight(); BaseSwitch switch1 = new BaseSwitch(iLight); switch1.makeLight(); RemoteControlSwitch switch2 = new RemoteControlSwitch(cLight); switch2.makeRemoteLight(3); } }