0

命令模式说:

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

命令将调用操作的对象与知道如何执行它的对象分离。

但是在我发现的所有代码示例中,Client(Requester,Inovker,RemoteControl,Waitress,Sender) 和实际对象 (Reciver,TV,Garage,Coffe) 之间存在耦合

如果您在以下 命令模式中提出这个问题

答案:说:您的遥控器不知道电视的存在或任何关于它的信息,它只是在您的 Command 对象上调用接口/方法。

但我看到远程类知道电视类,它(远程)正在创建电视类的对象。因此,那里存在通过关系的关联,即那里已经存在耦合。

你能帮我理解我所缺少的吗?我是否误解了解耦或其他东西的含义?

我真的对定义感到困惑。

4

2 回答 2

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电视 = 新电视()

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

命令 = 新 TVOffCommand(tv);

远程命令(命令);

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

于 2013-08-19T06:39:34.853 回答
0

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

最后一句话是命令设计模式的重点。一定有一些抽象和无意识。通常,您有一些系统接受可执行命令(使用定义IF的 = 合同)来执行“某事”。

这取决于您的 this 实现IF,通常有多个实现。我最后一次使用的是什么?

我们有使用 Quartz 框架的调度系统。我们已经将它包装到我们的某种服务中。该服务接受我们在特定时间内IF拥有的方法 - 使用石英。perform

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

尽管它们是真正的可执行代码,但这两种类型的任务都被执行了。并且包装服务不知道那里发生了什么,两种类型的任务都不知道调度系统。

于 2013-08-19T07:09:47.133 回答