В PHP я использую клиент, который подключается к порту и слушает его все время (используя цикл while).Если приходит сообщение, вызывается функция обратного вызова.Проблема в том, что вы можете установить только одну функцию обратного вызова для каждого клиента.Чтобы не иметь десятков клиентов, каждый из которых слушает только одного подписчика, я хочу поместить клиента в другой класс, который содержит одну общую функцию обратного вызова.Эта функция будет отправлять входящие сообщения соответствующим подписчикам.
В моем используемом фреймворке также используется шаблон фабрики.
Мне интересно, нормально ли это / чисто использовать фабрику, чтобы гарантироватьчто только один экземпляр клиента создан.И когда да, как это сделать?
В текущей реализации есть что-то вроде
private function getClient() {
if(static::$client == null)
{
static::$client = new Client();
}
return static::$client
}
, но я думаю, что это плохой дизайн из-за высокой зависимости в getClient () (это больше не взаимозаменяемо).
Вторая проблема заключается в том, что если я создам другой инкапсулирующий класс (в котором определен клиент), я всегда перезаписываю функцию обратного вызова.
Как можно гарантировать, что только один экземпляр инкапсулирующего класса с одним клиентом работает для правильной отправки всех зарегистрированных подписчиков?Это задача для завода?Любые другие подходы?
Спасибо