Head First设计模式——桥接模式
桥接模式
桥接模式:不只改变你的实现,也改变你的抽象。
如果有一个电视厂家,遥控器需要升级,电视也需要修改。这种变化部分的封装就适合使用桥接模式,桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。
设计类图:
实现遥控器抽象类
1 public abstract class RemoteControl 2 { 3 public TV tv; 4 public void SetTV(TV tv) { 5 this.tv = tv; 6 } 7 8 public abstract void SetChannel(); 9 }
具体子类
1 public class ConcreteRemote : RemoteControl 2 { 3 public override void SetChannel() 4 { 5 this.tv.TuneChannel(); 6 } 7 }
TV接口类
1 public interface TV 2 { 3 public void TuneChannel(); 4 }
特定TV实现
1 class PandaTV : TV 2 { 3 public void TuneChannel() 4 { 5 Console.WriteLine("熊猫电视调频道"); 6 } 7 } 8 9 10 class ChangHongTV:TV 11 { 12 public void TuneChannel() 13 { 14 Console.WriteLine("长虹电视调频道"); 15 } 16 }
测试桥接模式
现在有了两个层次结构,其中一个是遥控器,另一个是平台特定电视机实现。有了桥接的存在,就可以独立的改变这两个层次。
桥接的有点:
1、将实现予以解耦,让它和界面之间不再永久绑定。
2、抽象和实现可以独立扩展,不会影响到对方。
3、对于”具体的抽象类“所做的改变,不会影响到客户
桥接的用途和缺点:
1、适合使用在需要跨平台的图形和窗口系统上。
2、当需要用不同的方式改变接口和实现时,桥接模式很好用。
3、桥接模式的确定时增加了复杂度。