作者brian780405 (pohan)
看板C_Sharp
标题[问题] 命令模式的疑问
时间Thu Aug 24 14:15:50 2017
正常来说命令应该长这样
public interface Command
{
void Execute();
}
public class Command_1 : Command
{
public Receiver_1 receiver;
public string command;
public Command_1(Receiver_1 receiver, string command)
{
this.receiver = receiver;
this.command = command;
}
public void Execute()
{
receiver.Action(command);
}
}
public class Receiver_1
{
public void Action(string command)
{
//这里放实作
Console.WriteLine(command);
}
}
==============================================================================
但我的疑问是「直接继承Command然後实作」不就好了?
像这样
public class Command_2 : Command
{
private int command;
public Command_2(int command)
{
this.command = command;
}
public void Execute()
{
Console.WriteLine(command);
}
}
是因为实作上比较不直觉吗?
==============================================================================
有查到一个教学
https://goo.gl/mAqyG5
看到他把Receiver里面实作各种方法
看起来满方便的,但这样违反开放封闭原则吧?
所以现在已经有点搞不太懂命令模式为何要Command里面包Receiver了
而且C#直接用Action好像还比较方便?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.75.116.70
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1503555353.A.DFF.html
1F:→ Litfal: 每个Command的参数数量不会是一样的,当然不会继承同一个 08/26 17:22
2F:→ Litfal: 唯一规范就是,对於执行者来说,它知道这些东西能被执行 08/26 17:24
3F:→ Litfal: Receiver是接受命令的物件,其实就是命令参数的一部份,不 08/26 17:26
4F:→ Litfal: 是必须,但也不一定是唯一 08/26 17:27
5F:→ Litfal: 举个例来说,要对一个TextBox设定某字串,那建立时就会有 08/26 17:28
6F:→ Litfal: SetTextBoxCommand(TextBox txtBox, string s) 08/26 17:28
7F:→ Litfal: 这样两个参数必须要设定 08/26 17:29