命令模式 调用方与执行方二者是隔离的不互通的 把变化封装到中间层
直接看代码吧 没学太明白,理解个大概,等以后更明白了再来修改
先有一个人类
public class People
{
public int ID { get; set; }
public string Name { get; set; }
public string Class { get; set; }
}
有一个执行方法父类
public abstract class BaseReceiver
{
public abstract void Show(People people);
}
两个子类 重写了父方法
public class ShowNameReceiver:BaseReceiver
{
public override void Show(People people)
{
Console.WriteLine("我的名字是{0}",people.Name);
}
}
public class ShowClassReceiver : BaseReceiver
{
public override void Show(People people)
{
Console.WriteLine("我的班级是{0}",people.Class);
}
}
又来了一个父类 用来调用上面的类
public abstract class BaseCommand
{
public abstract void Set(BaseReceiver receiver);
public abstract void Show(People people);
}
相对应的两个子类
public class ShowNameCommand : BaseCommand
{
private BaseReceiver _receiver = null;
public override void Set(BaseReceiver receiver)
{
_receiver = receiver;
}
public override void Show(People people)
{
_receiver.Show(people);
}
}
public class ShowClassCommand :BaseCommand
{
private BaseReceiver _receiver = null;
public override void Set(BaseReceiver receiver)
{
_receiver = receiver;
}
public override void Show(People people)
{
_receiver.Show(people);
}
}
最后来一个发布命令的类
public class Invoker
{
private BaseCommand _com = null;
public void Set(BaseCommand com)
{
_com = com;
}
public void Show(People people)
{
_com.Show(people);
}
}
调用
People p = new People()
{
ID=1,
Name="小红帽",
Class="小班"
};
BaseReceiver receiver = new ShowNameReceiver();
BaseCommand command = new ShowNameCommand();
Invoker invoker = new Invoker();
invoker.Set(command);
command.Set(receiver);
invoker.Show(p);
结果
先理解一下结构吧,设计模式源于生活,等碰到的时候,就是顿悟的时候吧