这么多开关和电灯,如果现在在家里想换一盏水晶灯,难道要把墙抛开重新设计线路,才能装上水晶灯吗?当然不是的。开关连通电源,电线传输电源,电灯只是负责照明!各司其职,互不干扰,所以,想要换水晶灯,不必更换开关盒电线,只要更换电灯集合。同样,更换开关也是如此。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 桥接
{
//电灯接口
public interface ILight
{
//接通电源
void electricConnected();
//照明
void light();
//断开电源
void electricClosed();
}
//开关顶层类
public class BaseSwitch
{
//使用组合,设置ILight为内部私有属性,此为桥梁
protected ILight light;
//构造方法将外部的light类型注入进来
public BaseSwitch (ILight light)
{
this.light = light;
}
//开灯方法
public void makeLight()
{
//打开开关,接通电源
this.light.electricConnected();
//照明
this.light.light();
//关闭开关,断开电源
this.light.electricClosed();
}
}
//遥控开关
public class RemoteControlSwitch :BaseSwitch
{
//构造方法
public RemoteControlSwitch(ILight light)
: base(light)
{ }
//使用遥控开关控制开灯
public void makeRemoteLight(int operColor)
{
//打开开关,接通电源
this.light.electricConnected();
//照明
this.light.light();
string color = "";
switch (operColor)
{
case 1:
color = "暖色";
break;
case 2:
color = "蓝色";
break;
case 3:
color = "红色";
break;
case 4:
color = "白色";
break;
}
Console.WriteLine("...现在是" + color + "! ");
//关闭开关,断开电源
this.light.electricClosed();
}
}
//白炽灯
public class IncandescentLight :ILight
{
//接通电源
public void electricConnected()
{
Console.WriteLine("白炽灯被打开了...");
}
//断开电源
public void electricClosed()
{
Console.WriteLine("白炽灯被关闭了...");
}
//照明
public void light()
{
Console.WriteLine("白炽灯照明!");
}
}
//水晶灯实现
public class CrystalLight:ILight
{
//接通电源
public void electricConnected()
{
Console.WriteLine("水晶灯被打开了...");
}
//照明
public void light()
{
Console.WriteLine("水晶灯照明!");
}
//断开电源
public void electricClosed()
{
Console.WriteLine("水晶灯被关闭了...");
}
}
class Program
{
static void Main(string[] args)
{
//白炽灯实例
ILight incandescentLight = new IncandescentLight();
//水晶灯实例
ILight crystalLight = new CrystalLight();
Console.WriteLine("-- 一般开关 --");
//一般开关
BaseSwitch switch1 = new BaseSwitch(incandescentLight);
switch1.makeLight();
Console.WriteLine("\n-- 遥控开关 --");
//遥控开关
RemoteControlSwitch switch2 = new RemoteControlSwitch(crystalLight);
switch2.makeRemoteLight(1);
}
}
}//一般开关
BaseSwitch switch1 = new BaseSwitch(incandescentLight);
switch1.makeLight();修改为://一般开关
BaseSwitch switch1 = new BaseSwitch(crystalLight);
switch1.makeLight();原文:http://blog.csdn.net/ry513705618/article/details/38178579