设计实现 桥接模式,通过将一个相关的大类,拆分出抽象和实现两个层次,两个层次相互独立,抽象为通用的接口,各个实现类可根据自己的实际情况,采用不同的技术细节实现通用接口功能。
比如:在设计一套GUI组件时,需要对不同的操作系统作适配
传统方式:针对不同的系统,各自设计一套组件;针对红色按钮、蓝色按钮、白色按钮,各自写一套代码去实现。
桥接模式:针对GUI所要包含的组件,拆分抽象和实现两个层次;设计一套通用接口,不同的操作系统只需要实现接口要求的功能,不同操作系统上的使用者使用相同的代码,即可得到想要的组件。
具体实现 控制电视机、收音机,需要不同的控制器,且同一种设备的控制器仍然不同,比如a厂家的控制比较高级,功能多,能控制电视机闪烁;b厂家的控制器比较基础,只能控制开关。
Device -抽象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package com.lcf.demo.pattern.bridge.devices;public interface Device { void open () ; void down () ; boolean isOpen () ; int getChannel () ; void setChannel (int channel) ; void printStatus () ; }
RadioDevice-收音机设备
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package com.lcf.demo.pattern.bridge.devices;public class RedioDevice implements Device { int channel = 0 ; boolean open = false ; @Override public void open () { this .open=true ; System.out.println("open the radio" ); } @Override public void down () { System.out.println("shutdown the radio" ); } @Override public boolean isOpen () { return open; } @Override public int getChannel () { return 0 ; } @Override public void setChannel (int channel) { this .channel=channel; } @Override public void printStatus () { System.out.println("radio channel is" + open); } }
TVDevice-电视机设备
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 package com.lcf.demo.pattern.bridge.devices;public class TVDevice implements Device { int channel=50 ; boolean open=false ; @Override public void open () { this .open=true ; System.out.println("open the tv" ); } @Override public void down () { this .open=false ; System.out.println("close the tv" ); } @Override public boolean isOpen () { return open; } @Override public int getChannel () { return channel; } @Override public void setChannel (int channel) { this .channel=channel; } @Override public void printStatus () { System.out.println("the tv status is" +open); } }
Remote-控制器
1 2 3 4 5 6 7 8 package com.lcf.demo.pattern.bridge.remotes;public interface Remote { void power () ; void shudown () ; }
BasicRemote-基础控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package com.lcf.demo.pattern.bridge.remotes; import com.lcf.demo.pattern.bridge.devices.Device; public class BaseRemote implements Remote{ private Device device; public BaseRemote(Device device){ this.device=device; } @Override public void power() { device.open(); } @Override public void shudown() { device.down(); } }
AdviceRemote-高级控制器
可在基础控制器基础上,进一步扩展高级功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package com.lcf.demo.pattern.bridge.remotes; import com.lcf.demo.pattern.bridge.devices.Device; public class AdvanceRemote extends BaseRemote{ public AdvanceRemote(Device device) { super(device); } public void play(){ super.power(); super.shudown(); } }