2012-02-19 5 views
2

のは、私は3つのPHPクラスがあるとしましょう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クラスの仕事のために同じツールセットを、欲しい、Iこの場合、ハンマー、ドライバー、釘などを使用できるように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

+0

何らかの理由で実装しても問題ありません。ビルドには「最適」または「最適化」のようには見えませんでしたが、あなたのコメントは良い保証であり、この実装を進めます。 – ews2001

答えて

4

Toolsetをインスタンス化し、そのコンストラクタ内の各ワーカークラスに$toolsetを提供することはすでにDependency Injection,と呼ばれています。実際にはほとんどの場合、このタスクを処理するのが好ましい方法です。

シングルトンToolsetオブジェクトを作成することで実現できますが、依存関係の注入によってきれいにテスト可能な方法でそれを処理する場合は不要です。

+0

優れた説明とWikipediaのリンク。 – ews2001

0

私はこれらの3つのビルダークラスに親クラスを使用し、ツールセットには静的変数を使用する親クラスで行うと思います。静的変数の使用についてはCheck this page

関連する問題