由于Erlang不是真正面向对象的,所以没有真正的单例类,但我想 注册的流程可以作为一个流程使用。
在应用程序内部使用已注册的进程来简化访问是否是一种好习惯? 缺点我看到,例如,你不能在一个节点内运行这样一个应用程序的多个实例。
以gui应用程序为例,其中包含管理事件的进程以及其他负责声音的进程。
制作那些2" singleton"是不错的做法。作为已注册的流程并将其称为sound:play(file_name)
,而不是存储pid并执行sound:play(Pid, file_name)
?
答案 0 :(得分:9)
在注册名称下使用gen_server来完成此操作是相当常见的。您可以从同一模块中导出函数,这些函数只是执行gen_server:对相关的命名进程进行调用。
(可以说,Erlang比你可能习惯的更“真实”OO。但这不是这个问题的所在。)