这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
桥接模式
今天让我们来学习桥接模式,这个模式比较简单,所以篇幅不会太长就可以理解到。
桥接模式:不只改变你的实现,也改变你的抽象。
如果有一个电视厂家,遥控器需要升级,电视也需要修改。这种变化部分的封装就特别适合使用桥接模式,桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。
下面是桥接模式的设计类图:
有一个叫远程控制RemoteControl的抽象类,然后抽象类有一个叫TV的接口类型的属性,如果所示,RemoteControl has-a TV这种关系就叫做桥接模式。 下面我们通过代码来看看如何实现这个模式。
实现遥控器抽象类
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、桥接模式的确定时增加了复杂度。