命令模式
命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
代码:
//声明一个借口command
public interface command
{
void execute();
void offExecute();
}
写两个实体类
public class Light
{
public void on()
{
Console.WriteLine("the light is turn on!");
}
public void off()
{
Console.WriteLine("the light is turn off!");
}
}
public class door
{
public void open()
{
Console.WriteLine("the door open");
}
public void close()
{
Console.WriteLine("the door closed");
}
}
实现command接口的控制类
public class doorCommand:command
{
private door door;
public doorCommand(door door)
{
this.door = door;
}
public void execute()
{
door.open();
}
public void offExecute()
{
door.close();
}
}
public class LightCommad : command
{
private Light light;
public LightCommad(Light light)
{
this.light = light;
}
public void execute()
{
light.on();
}
public void offExecute()
{
light.off();
}
}
实现远程控制类
public class RemoteControll
{
command[] onCommands;
command[] offCommands;
public RemoteControll()
{
onCommands = new command[7];
offCommands = new command[7];
}
public void setCommand(int slot,command onCommand,command offCommand)
{
onCommands[slot] = onCommand;
offCommands[slot] = offCommand;
}
public void pressButton(int slot)
{
if (onCommands[slot] == null)
{
Console.WriteLine("无命令可执行!");
}
else
{
onCommands[slot].execute();
}
}
public void offPressButton(int slot)
{
if (offCommands[slot] == null)
{
Console.WriteLine("无命令可执行!");
}
else
{
offCommands[slot].offExecute();
}
}
}
测试
static void Main(string[] args)
{
Light light = new Light();
LightCommad lightCommad = new LightCommad(light);
door door1 = new door();
doorCommand doorCommand1 = new doorCommand(door1);
RemoteControll remoteControll = new RemoteControll();
remoteControll.setCommand(2, lightCommad,lightCommad);
remoteControll.setCommand(4, doorCommand1, doorCommand1);
remoteControll.pressButton(2);
remoteControll.offPressButton(3);
Console.ReadLine();
}