这里的两个具体类有自己的特征和行为,只是此时此刻,我们简单化以下。 Shubho: 非常棒,接下来电灯和风扇怎么办? Farhana: 我试试. 根据OODP的开放闭合原则,我们知道只要可能,就应该尝试抽象,对吗? Shubho: 对 Farhana: 跟开关不一样,风扇和电灯等是两种不同的事物。对于开关,我们能够使用一个开关基类 Shubho: 可以 Farhana: 好,每种电器都有些相同的功能。他们能够打开和关闭。所以接口可能如下: public interface IElectricalEquipment { void PowerOn(); //每种电器都能打开 void PowerOff(); //每种电器都能关闭 } Farhana: 是的,但开关不能直接知道风扇或电灯。开关应当知道一个电器 Shubho: 对,对风扇或电灯的封装的实例是一个桥梁。所以让我们修改 public class Switch { public IElectricalEquipment equipment { get; set; } public void On() { //开关打开 } public void Off() { //开关关闭 } } IElectricalEquipment 接口。下面是风扇类: public class Fan : IElectricalEquipment { public void PowerOn() { Console.WriteLine("风扇打开"); } public void PowerOff() { Console.WriteLine("风扇关闭"); } } 下面是电灯类: public class Light : IElectricalEquipment { public void PowerOn() { Console.WriteLine("电灯打开"); } public void PowerOff() { Console.WriteLine("电灯关闭"); } } Shubho:太好了。现在让开关工作。当开关打开关闭的时候它应当能够打开关闭电器(它连接到的) 。 这里的关键点是:
大致的代码如下: static void Main(string[] args) { //构造电器设备:风扇,开关 IElectricalEquipment fan = new Fan(); IElectricalEquipment light = new Light(); //构造开关 Switch fancySwitch = new FancySwitch(); Switch normalSwitch = new NormalSwitch(); //把风扇连接到开关 fancySwitch.equipment = fan; //开关连接到电器,那么当开关打开或关闭时电器应该打开/关闭 fancySwitch.On(); fancySwitch.Off(); //把电灯连接到开关 fancySwitch.equipment = light; fancySwitch.On(); //打开电灯 fancySwitch.Off(); //关闭电灯 } |