观察者模式 C 和 Java

Posted

技术标签:

【中文标题】观察者模式 C 和 Java【英文标题】:Observer pattern C and Java 【发布时间】:2012-02-15 21:32:38 【问题描述】:

当我使用 2 种编程语言 C 和 Java 时,实现观察者模式的最佳方法是什么?它不一定使用观察者模式,我只需要知道如何实现类似 notifyall() 的方法或函数来通知在一个客户端操作后连接到会话的两个客户端。只需向他们发送字符串消息就足够了。 我有 C 语言的服务器应用程序和 Java swing 的客户端。 服务器上有n个游戏,每个游戏可以连接两个客户端。 服务器和客户端使用带有 Inet 地址的套接字,服务器和客户端有 2 个方法 - 发送、接收。 我意识到: 服务器 - C : - 发送 - 向客户端发送消息(客户端由套接字文件描述符指定) - 接收 - 从客户端接收消息(客户端由套接字文件描述符指定) 客户端 - 在 Java 中 - 发送 - 向服务器发送消息(服务器由套接字文件描述符指定) - 接收 - 从服务器接收消息(服务器由套接字文件描述符指定) 服务器在 localhost 127.0.0.1 和端口上运行,例如 10000 客户也是。我将客户端连接到服务器地址 127.0.0.1,端口 10000。

消息是简单的字符串,例如“Hello world\n” 1.运行服务器,服务器等待消息 2. 运行客户端 - 客户端向服务器发送消息 3. 服务器 - 接收消息并将消息发送回客户端 服务器使用 fork 处理新进程中的每个客户端 服务器和客户端写入发送和接收的消息 4.发送消息后的客户端

这是行得通的。

我在java swing中有代表客户端GUI的类,有n个按钮(JButton),例如16个,每个都有图像图标,每个按钮都添加了ActionListener 如果我单击按钮,应该会发生一些事情 - 更改或不更改 ImageIcon。 我正在尝试实现的是类似于观察者的方法

我需要以某种方式在服务器上设置会话:(代表游戏) 游戏1:客户端1,客户端2 游戏 2:客户端 3、客户端 4 游戏 3:客户端 5、客户端 6 等等。 1.我在client1中按下15号按钮,客户端向服务器发送消息,如“client1按下15号按钮” 2. 服务器收到消息,并发送类似“client1 按下按钮 15”的消息给所有在 game1 中连接的客户端(client1,client2)。在服务器消息中也会出现类似“更改按钮 15 的 ImageIcon”之类的内容。 第 2 点应该是函数 notifyAll 有什么好的和简单的方法来实现它?

感谢您的建议。

【问题讨论】:

【参考方案1】:

您只需要“通知”客户的“列表”

“列表”可以像一组主机名或 IP 地址一样简单。

您的“事件”处理程序只会遍历列表,依次向每个主机发送消息。

【讨论】:

以上是关于观察者模式 C 和 Java的主要内容,如果未能解决你的问题,请参考以下文章

观察者设计模式

大话设计模式-观察者模式(大鸟与小菜java版)

JAVA SCRIPT设计模式--行为型--设计模式之Observer观察者模式(19)

JAVA SCRIPT设计模式--行为型--设计模式之Observer观察者模式(19)

Java进阶篇设计模式之十三 ---- 观察者模式和空对象模式

观察者模式和java委托