2012-02-19 70 views
2

比方说,我有3个PHP类:ShedBuilder,HouseBuilder和TableBuilder和下面的代码:PHP - 如何跨多个子类共享设置并实例化这些共享设置一次?

$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名工人都知道如何访问他们工作所需工具的最佳方式是什么?

我想到了已经货场/表/房地产建筑商从每一个父类,生成器扩展,但是这意味着,当我每个实例我必须给他们每个工具集:

$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中做什么?

+2

是的,注入工具集作为依赖关系几乎是你要找的。你在执行这个过程中遇到了一个具体问题吗? – deceze 2012-02-19 00:57:22

+0

实现起来并不是问题,出于某种原因,它似乎不是“最佳”或“最优化”的构建方式,但您的评论是很好的保证,我将继续执行此实现。 – ews2001 2012-02-19 01:06:47

回答

4

你有什么已经,实例化一个Toolset和它们的构造提供$toolset到每个工人类,被称为Dependency Injection,,它实际上是处理这个任务大部分时间的首选方式。

可以通过创建一个单例对象来实现它,但是当依赖注入以一种整洁且易于测试的方式处理它时,这是不必要的。

+0

优秀的描述和维基百科链接,帮助。 – ews2001 2012-02-19 01:07:54

0

我想为这3个构建器类使用父类,并在使用工具集的静态变量的父类中执行。使用静态变量的Check this page