首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >观察者模式是-命令模式?

观察者模式是-命令模式?
EN

Software Engineering用户
提问于 2019-04-04 09:11:49
回答 3查看 2.4K关注 0票数 -2

让我向您展示观察者模式和命令模式之间的连接/相似,这让我感到惊讶。以下是观察者模式的类图:

以下是命令模式的类图,我在其上添加了一个红色箭头来表示接收方和调用方之间可能存在继承关系:

以下是值得注意的几点:

  • 观察者模式的思想是适应实现了观察者接口的每个类。
    • 当一个被调查对象想要向那些观察者发布新闻时,它只是“让他们自己从他那里检索新闻”。

  • 另一方面,Command模式的思想是隐藏每个命令是如何执行的细节,因此IMO还可以容纳每个实现了命令接口的类。
    • 每当调用者想要执行该命令时,他只需调用命令的execute()即可。
    • 现在的重点是:每个命令调用一个具体的接收器,其中一个同时也可以是一个调用者,完成任务。
    • 我可以说,在观察者模式中,ConcreteSubject可以看作是一个接收者+调用者,它的任务是为ConcreteCommand提供消息,而另一个任务是调用这些观察者的命令Update()

对,是这样?

EN

回答 3

Software Engineering用户

发布于 2019-04-04 09:34:09

命令模式为在不直接支持这些特性的语言中处理函数指针和闭包提供了一个抽象。

观察者模式为不直接支持事件的语言提供事件系统(主题通知一个或多个侦听器功能,通知主题状态的变化)。

两种方法都使用对象来提供函数指针抽象。有相似之处。但是它们之间最大的区别是,观察者模式处理多个函数,而命令模式只处理一个函数。

票数 3
EN

Software Engineering用户

发布于 2020-12-19 10:50:11

观察者模式是-命令模式?

这是一个非常糟糕的方式来思考设计模式。

设计模式不是构建块。把它们当作构建块,然后在这些构建块中寻找相似之处可能很有趣,就像在云中找到形状是有趣的,但在构建系统时却没有帮助。

相反,设计模式是对设计问题的答案--建议的答案。仅仅因为两个问题有相似的建议答案,并不一定意味着问题本身在任何方面都是相关的。软件工程的目的是理解和解决问题,而不是专注于答案。

票数 1
EN

Software Engineering用户

发布于 2019-04-04 09:28:57

我想说,这两种模式的不同之处在于,在命令模式中,您有一个命令对象。它被传递,可以持久化并包含执行所需的所有信息。

例:BuyProduct: Command { product, user }

使用观察者模式,您没有对象,只需转发一般的更改事件。

eg CollectionChanged(List<Item> addedItems added, List<Item> removedItems)

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/389758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档