首页 > 解决方案 > 使用工厂确保单个实例行为

问题描述

在 PHP 中,我使用的是一个客户端,它连接到一个端口并一直在监听它(使用 while 循环)。如果消息到达,则调用回调函数。问题是您只能为每个客户端设置一个回调函数。为了没有几十个客户端,每个客户端只听一个订阅者,我想将客户端封装到另一个类中,该类持有一个通用回调函数。该函数将传入的消息分发给相应的订阅者。

在我使用的框架中,也使用了工厂模式。

我想知道使用工厂来确保只创建一个客户端实例是否可以/干净。如果是,该怎么做?

在当前的实现中,有类似的东西

private function getClient() {
    if(static::$client == null) 
    {
        static::$client = new Client();
    }
    return static::$client
}

但我认为,由于 getClient() 方法的高度依赖性(它不再可互换),这是一个糟糕的设计。

第二个问题是,如果我创建另一个封装类(其中定义了客户端),我将始终覆盖回调函数。

如何确保只有一个具有一个客户端的封装类实例正在运行以正确调度所有注册的订阅者?这是工厂的任务吗?还有其他方法吗?

谢谢

标签: phpsingletonfactory

解决方案


推荐阅读