简介:
命令模式的意图是将一个请求封装为一个对象,不同的请求对应相应的接受者执行对应的方法。
在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
介绍:
优点 | 1.新命令更容易加入系统。 2.请求者和接受者解耦。 |
缺点 | 1.命令过多时会产生过多的具体命令。 |
特点 | 1.调用者的命令,会被传递给相应的接受者。现二者之间的松耦合。 |
命令角色(Command) | 抽象命令接口。 |
具体命令角色(ConcreteCommand) | 实现抽象命令接口。 |
请求者角色(Invoker) | 命令的请求者。 |
接受者角色(Receiver) | 命令的执行者。 |
使用:
//Receiver
public sealed class Student
{
public void Execute()
{
//do something
}
}
//Commmand
public abstract class Shape
{
protected Student _student;
protected Shape(Student student)
{
this._student = student;
}
public abstract void Draw();
}
//ConcreteCommand
public sealed class Square : Shape
{
public Square(Student student) : base(student) { }
public override void Draw()
{
_student.Execute();
}
}
//Invoker
public sealed class Teacher
{
private Shape shape;
public Teacher(Shape shape)
{
this.shape = shape;
}
public void Command()
{
shape.Draw();
}
}
//命令模式调用
Student liS = new Student(); //命令接受者
Shape square = new Square(liS); //具体命令
Teacher zhangT = new Teacher(square);//命令请求者
zhangT.Command(); //命令请求者