我试图将Observer设计模式理解为主要事件调度设计模式.观察者模式似乎是发布 - 订阅设计模式的类型或类型,我想知道为什么有两个相似的外观设计模式以及我应该如何在两者之间进行选择.
在这两种情况下,信息消息都在实体之间发送,在这两种情况下,实体必须以某种方式注册或订阅才能接收消息.
两种设计模式之间的主要区别似乎是:
我想到的一个想法是,在多线程应用程序中,可以在多个线程之间进行通信而不是Observer模式时使用Publish-Subscribe模式.也许Observer模式可以在进程之间使用,例如进程注册与另一个进程注册,以便在事件发生时得到通知.一个示例是农场管理仪表板应用程序,其注册多个动物饲料箱,如果由箱测量的饲料水平或重量下降到某个阈值以下则通知.
这两种设计模式之间是否存在其他重要差异,这些设计模式可以为选择一种模式提供标准?
design-patterns publish-subscribe event-dispatching observer-pattern
我使用snprintf将字符串连接到char数组:
char buf[20] = "";
snprintf(buf, sizeof buf, "%s%s", buf, "foo");
printf("%s\n", buf);
snprintf(buf, sizeof buf, "%s%s", buf, " bar");
printf("%s\n", buf);
Run Code Online (Sandbox Code Playgroud)
问题是第二次连接buf
而不是添加"bar"
,替换"foo"
它.输出如下:
foo
bar
Run Code Online (Sandbox Code Playgroud)
第一个%s
应该保留buf
(在这种情况下保持"foo"
).第二个%s
应该附加"bar"
它.对?
我究竟做错了什么?
我试图在c中连接到rabbitmq并且每次都失败了.我就是这样做的.
下载rabbitmq-c
安装it(make && make install
)只是为了确保满足依赖性.
修改后的连接变量amqp_sendstring.c
使用make
,运行./amqp_sendstring
和工作
然后我开始创建自己的文件并通过gcc编译它们使用:
gcc -lrabbitmq -o j_test test.c
Run Code Online (Sandbox Code Playgroud)
具有讽刺意味的是,它无法与librabbitmq链接以下错误:
/tmp/cc63IlXq.o: In function `main':
test.c:(.text+0xa): undefined reference to `amqp_new_connection'
test.c:(.text+0x1a): undefined reference to `amqp_destroy_connection'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我从ampq_*开始删除了所有内容.瞧!它成功建成.这对我来说是gcc能够找到头而不是lib的指示器.
这是test.c源代码:
#include <amqp.h>
#include <amqp_framing.h>
int main(int argc, char const * const *argv) {
amqp_connection_state_t conn;
conn = amqp_new_connection();
amqp_destroy_connection(conn);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人请指出我正确的方向吗?
编辑:我忘了提到我在ubuntu盒子(12.04).认为它隐含在上述陈述中.