【发布时间】:2012-03-09 21:08:14
【问题描述】:
假设我有 3 个 PHP 类:ShedBuilder、HouseBuilder 和 TableBuilder 以及以下代码:
$worker_1 = new ShedBuilder(); // I only know how to build a shed
$worker_2 = new HouseBuilder(); // I only know how to build a house
$worker_3 = new TableBuilder(); // I only know how to build a table
$worker_1->build();
$worker_2->build();
$worker_3->build();
我希望 worker_1、worker_2 和 worker_3 类各自共享相同的工具集来完成工作,例如,我希望所有 3 个工人都使用可用的工具,在本例中是锤子、螺丝刀、钉子等。但是 worker_1建棚子,worker_2 建房子,worker_3 建桌子。
设置工具集一次,然后让 3 名工人中的每一个都知道如何访问他们工作所需的工具的最佳方法是什么?
我曾想过让 Shed/Table/House 构建器每个都从父类 Builder 扩展,但这意味着当我实例化每个构建器时,我必须为每个构建器提供工具集:
$toolset = new Toolset();
$toolset->addTool('hammer');
$toolset->addTool('screwdriver');
$toolset->addTool('nails');
$worker_1 = new ShedBuilder($toolset);
$worker_2 = new HouseBuilder($toolset);
$worker_3 = new TableBuilder($toolset);
我宁愿将工具实例化一次,然后让所有 3 个工人/班级了解工具集并分别构建他们的每个项目。
在 PHP 中实现我想要做的事情的最佳方式是什么?
【问题讨论】:
-
是的,将工具集作为依赖项注入正是您想要的。您在实施时遇到具体问题吗?
-
实施不是问题,由于某种原因,它似乎不是“最佳”或“最优化”的构建方式,但您的评论是很好的保证,我将继续执行此实施.