1.命令控制
namespace CommandPattern
{
/*命令模式:当有客户端发送了一系列的命令或请求,去要求某个对象实现什么操作,
* 可使用命令模式,相当于多个命令发给一个对象。
*
* 这一点和观察者模式非常的类似。观察者模式也是某个对象,发出消息,然后由中
* 间对象通知观察者然后去做什么,封装的是要执行操作的对象。
* 而命令模式,则是将各个操作封装成类,然后告知某个对象该做什么。
*
* 两者的区别是封装的角度不同,但有异曲同工之妙
*/
public abstract class Command
{
protected Student student;
public Command(Student studentObj)
{
student = studentObj;
}
public abstract void ExecuteCommand();
}
/// <summary>
/// 做语文作业类
/// </summary>
class YuWen : Command
{
public YuWen(Student studentObj)
: base(studentObj)
{ }
public override void ExecuteCommand()
{
student.DoYuWen();
}
}
/// <summary>
/// 做数学作业
/// </summary>
class ShuXue : Command
{
public ShuXue(Student studentObj)
: base(studentObj)
{ }
public override void ExecuteCommand()
{
student.DoShuXue();
}
}
/// <summary>
/// 命令的具体实施者
/// </summary>
public class Student
{
public void DoYuWen()
{
Console.WriteLine("做语文作业");
}
public void DoShuXue()
{
Console.WriteLine("做数学作业");
}
}
/// <summary>
/// 命令的发布者
/// </summary>
public class Teacher
{
protected List<Command> list = new List<Command>();
/// <summary>
/// 安排作业
/// </summary>
/// <param name="comm"></param>
public void Arrange(Command comm)
{
if (comm.ToString() != "CommandPattern.ShuXue")
list.Add(comm);
}
/// <summary>
/// 要求实施
/// </summary>
public void Release()
{
foreach (var com in list)
com.ExecuteCommand();
}
}
}
2.调用
static void Main(string[] args)
{
//实例化学生对象
Student stu = new Student();//命令执行者
Command com1 = new YuWen(stu);
Command com2 = new ShuXue(stu);
Command com3 = new YuWen(stu);
Teacher tech = new Teacher();//设置作业
tech.Arrange(com1);
tech.Arrange(com2);
tech.Arrange(com3);
tech.Release();
Console.ReadKey();
}