实例化需要注入 Bridge (pattern) 对象的对象。我应该怎么做?

Instantiating objects that need to be injected with Bridge (pattern) objects. How should I do it?

上下文如下:

我有作业 class 表示发送到作业队列的作业。 目前我们只为此目的使用 SQS,但将来我们可能会迁移到 Redis 或其他 MQ 解决方案。 所以目前,我有一个可以扩展到 ConcreteJobOne 和 ConcreteJobTwo 的 AbstractJob,并且可以被 AbstractQueueClient(可以是 SqsQueueClient)使用。我需要一种从 Job 对象获取有效负载的方法,我想到的是使用 bridge pattern.

$parameters = [];
$sqsClient = new AbstractQueueClient();
$jobOne = new ConcreteJobOne($parameters, new SqsPayloadBridge());
$sqsClient->queueSingleJob($jobOne);

这样,我就可以改变为特定客户端构建有效载荷的方式。

但是负责排队该作业的控制器必须了解 SqsPayloadBridge 以及将来可能出现的所有其他桥。我考虑过使用工厂模式来解决这个问题,但似乎有点过分了。

有什么想法吗?

我完全不使用 Bridge 解决了这个问题。

AbstractQueueClient 的实现将以他们认为合适的方式处理来自 Job 实现的 ->toArray()。