设计可以控制开关的程序,可以控制种类不同的物件,便于增加和复用。
UML图:
TV 和 Light类可以是抽象类或者接口
第一个类:开关接口类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp4
{
interface IsSwitchable
{
void TurnOff();
void Lighting();
void TurnOn();
//开关接口
}
}
接口类包含三个函数:开、关、亮
第二、三个类:抽象函数灯、电视类(灯和电视可以派生出各种类型的灯、电视)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp4
{
abstract class Light : IsSwitchable
{
public abstract void TurnOff();
public abstract void TurnOn();
public abstract void Lighting();
//抽象类Light
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp4
{
abstract class Tv : IsSwitchable
{
public abstract void Lighting();
public abstract void TurnOff();
public abstract void TurnOn();
//抽象类Tv
}
}
这两个抽象类只声明,并不具体实现,由他们的子类来实现。
第四、五个类:具体灯、电视类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp4
{
class TubeLight : Light
{
public override void TurnOn()
{
Console.WriteLine("打开");
}
public override void Lighting()
{
Console.WriteLine("灯亮了");
}
public override void TurnOff()
{
Console.WriteLine("关闭");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp4
{
class BulbLight : Light
{
public override void TurnOff()
{
Console.WriteLine("关闭");
}
public override void TurnOn()
{
Console.WriteLine("打开");
}
public override void Lighting()
{
Console.WriteLine("灯亮了");
}
}
}
最后一个类:开关控制类(成员是接口对象)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp4
{
class ToggleSwitch
{
protected IsSwitchable Ilight;
public ToggleSwitch(IsSwitchable ilight)
{
this.Ilight = ilight;
}
public void makeLight()
{
this.Ilight.TurnOn();
this.Ilight.Lighting();
this.Ilight.TurnOff();
}
//@开关类
//这里也可以写选择灯是开是关的函数
}
}
然后可以测试一下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
IsSwitchable Tube = new TubeLight();
Console.WriteLine("创建一个灯管");
IsSwitchable Bulb = new BulbLight();
Console.WriteLine("创建一个灯泡");
ToggleSwitch TogOne = new ToggleSwitch(Tube);
TogOne.makeLight();
}
}
}