由于 Erlang 不是真正面向对象的,因此没有真正的单例类,但我猜
已注册的进程可以作为一个进程使用。
在应用程序内部使用注册进程以使访问更容易是一种好习惯吗?
缺点我看到,例如,您不能在一个节点内运行多个此类应用程序的实例。
以一个 gui 应用程序为例,它有一个进程管理事件和其他一些负责声音的进程。
将这两个“单例”作为注册进程并将它们称为 sound:play(file_name)
是否是一种好习惯?而不是存储 pid 并执行 sound:play(Pid, file_name)
?
最佳答案
使用注册名称下的 gen_server 来执行此操作是相当普遍的。您可以从同一个模块中导出函数,这些函数只需对有问题的命名进程执行 gen_server:call 即可。
(可以说,Erlang 比您可能习惯的更“真正”的 OO。但这不是这个问题的意义所在。)
关于Erlang 和 Singleton 的好习惯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460281/