命令模式显示:
命令模式允许您将动作的请求者与实际执行操作的对象分离开来。
命令将调用操作的对象与知道如何执行操作的对象解耦。
但在我发现的所有代码示例中,客户端(请求者、Inovker、RemoteControl、侍应生、发件人)与实际对象(累西弗、电视、车库、咖啡)之间存在耦合。
如果您在下面的Command pattern中问到这个问题
回答:您的遥控器不知道TV是否存在,或者任何有关它的东西,它只是在命令对象上调用一个接口/方法。
但是我看到远程类知道TV类,而它( Remote )是创建TV类的对象。因此,通过一个关系存在着联系,也就是说,那里已经存在一个耦合。
你能帮我理解我错过了什么吗?我是否误解了脱钩或其他东西的含义?
我真的很困惑于定义。
发布于 2013-08-19 06:39:34
我认为它应该是像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 ()
remote =新Remote() //客户端
命令=新的TVOffCommand(电视);
Remote.command(命令);
查看一下链接,它提供了概念http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial
发布于 2013-08-19 07:09:47
我认为将有关电视和远程控制的示例封装到命令设计模式中是没有意义的。你只有电视和遥控器。即使要添加接口,也没有意义,因为抽象级别很小(或者没有)。
最后一句是指挥设计模式的要点。一定有一些抽象概念和缺乏意识。通常,您有一些系统可以接受可执行命令(使用定义的IF = contract)来执行“某些事情”。
这取决于这个IF的实现,通常有比一个更多的实现。我最后的用途是什么?
我们有使用Quartz框架的调度系统。我们把它包装成某种服务。该服务接受我们的IF在一定时间内拥有perform方法--使用石英。
我们有两种类型的可执行任务--一种是立即执行的,另一种是用额外的时间重新安排的--因为其他原因超出了这个问题的范围。
这两种类型的任务都是执行的,尽管它们所做的是,尽管它们是真正的可执行代码。和包装服务有,没有知识,那里发生了什么,而且这两种类型的任务都有,没有关于调度系统的知识。
https://stackoverflow.com/questions/18307264
复制相似问题