命令模式混乱

时间:2013-08-19 06:02:52

标签: c# design-patterns

命令模式说:

命令模式允许您将操作的请求者与实际执行操作的对象分离。

命令将调用操作的对象与知道如何执行操作的对象解耦。

但在我发现的所有代码示例中,客户端(请求者,Inovker,RemoteControl,Waitress,Sender)与实际对象(Reciver,TV,Garage,Coffe)之间存在耦合

如果你在下面这个问题 Command pattern

答案:说:遥控器不知道电视存在,或其他任何相关内容,只是在Command对象上调用接口/方法。

但是我看到Remote Class知道TV类,它(远程)正在创建TV类的对象。因此,存在一种关系,即那里已存在耦合。

你能帮我理解我错过的东西吗?我是否误解了脱钩或其他东西的含义?

我对定义感到困惑。

2 个答案:

答案 0 :(得分:1)

我认为它不应该是电视,而应该是像ITV这样的界面

public class TVOffCommand : Command    
{
    ITV tv;

    public TVOffCommand (ITV aTV)
    {
        this.tv= aTv;
    }

    #region Command Members

    public object Execute()
    {
        return tv.Off();
    }

    #endregion
}

并且您的遥控器应该调用如下所示的内容:

ITV tv = new TV()

remote = new Remote()//你的客户

command = new TVOffCommand(tv);

remote.command(命令);

查看链接,提供概念http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial

答案 1 :(得分:0)

我认为将有关电视和遥控器的示例包装成命令设计模式是没有意义的。你只有电视和遥控器。即使您要添加接口,也没有意义,因为 small (或没有)抽象级别。

最后一句是命令设计模式的全部要点。必须有一些抽象和不负责任。通常,您有一些系统接受可执行命令(使用已定义的IF = contract),该命令执行“某事”。

这取决于您对此IF的实现,通常有更多的实现而不是一个。我上次使用的是什么?

我们有使用Quartz框架的调度系统。我们把它包装成某种服务。此服务在特定时间内接受我们的IF perform方法 - 使用quartz。

我们有两种类型的可执行任务 - 一种是立即执行的,另一种是在额外的时间内重新安排的 - 由于其他原因超出了这个问题的范围。

两种类型的任务都执行了尽管他们做了什么,尽管它们是真正的可执行代码。 包装服务没有知识那里发生了什么,两种类型的任务都没有关于调度系统的知识。