Farhana: 明白。开关的On()方法应当内部调用电器的TurnOn()方法,Off()方法应当内部调用TurnOff()方法,所以开关类Switch应如下: public class Switch { public IElectricalEquipment equipment { get; set; } public void On() { Console.WriteLine("开关打开"); equipment.PowerOn(); } public void Off() { Console.WriteLine("开关关闭"); equipment.PowerOff(); } } Shubho: 很好。这自然允许你把风扇从一个开关接到另一个上。不过你看,反过来也可以。这意味着你可以改变风扇或电灯的开关而不需要碰到风扇或电灯。例如,你可以很轻松的把点灯的开关从FancySwitch换到NormalSwitch上,如下: normalSwitch.equipment = light; normalSwitch.On(); //打开电灯 normalSwitch.Off(); //关闭电灯 你看,连接一个抽象电器到一个开关(通过封装)能够让你改变开关和电器而不会对对方产生影响。这个设计是优雅的,良好的。四人组为该模式取名为:桥接模式。Farhana: 太棒了。我想我明白这个了。从根本上说,两个系统不应当直接联系或依赖与对方。 当然,他们应该联系或依赖于抽象(如依赖倒置原则和开放闭合原则所讲),所以他们是松耦合的,因此我们可以在需要时改变我们的实现而不会对系统其他部分产生过多影响。 Shubho: 你理解了,亲爱的.我们看下桥接模式的定义: "将抽象部分与实现部分分离,使它们都可以独立的变化"你看我们的实现完美遵循该定义。如果你有一个类设计器(如Visual Studio或其他支持该功能的IDE环境),你会看到类似的如下类图: 
桥接模式类图 在这里, Abstraction 是开关基类Switch。 RefinedAbstraction 是具体开关类 (FancySwitch ,NormalSwitch 等等。)。 Implementor 是电器接口IElectricalEquipment 。ConcreteImplementorA 和ConcreteImplementorB 是电灯类Light和风扇类Fan。 Farhana: 问你个问题,只是好奇啊。如你所说有很多其他的设计模式,为什么你以桥接模式开始呢?有重要原因吗? Shubho: 这个问题很好。是的,我以桥接模式而不以其他开始是因为一个理由。我认为桥接模式是所有面向对象模式的基础。理由如下: - 它教导如何思考抽象,这是面向对象设计模式的关键概念。
- 它实现了基本的OOD原则。
- 它容易理解。
- 如果正确理解该模式,学习其他模式会很容易。
Farhana: 你认为我理解的对吗? Shubho: 我认为你理解的非常正确。 Farhana: 那么接下来是什么? Shubho: 通过理解桥接模式,我们仅仅是开始理解设计模式的思想。在我们接下的对话中,我们将会学习其他的设计模式,我希望你不会觉得它们无聊。 Farhana:不会的,相信我。
http://blog.csdn.net/tigerdsh/article/details/8885908 |