戦略メソッドは、テンプレート メソッドとうまく連携します。
テンプレート メソッドは、クラスの要件を指定します。戦略メソッドを使用すると、オブジェクトを使用して動作を定義し、依存性注入を使用して実行時にそれらを定義できます。
class CRUDTemplate
{
protected $updater;
protected $creator;
protected $deletor;
protected $loader;
public function __construct(IUpdate $updater, ICreator $creator, IDeletor $delete, ILoader $loader)
{
$this->updater = $updater;
//...snipped...
}
// sample template function; others are create, delete, update
public function load($id)
{
$this->content = $this->loader->load($id);
}
}
サンプル コードは各戦略を呼び出すテンプレート関数を示しているだけですが、入力の検証、初期化など、テンプレート関数の特殊なオーバーロード バージョンでさらに多くのことを実行できます。そして結局のところ、何かが戦略を呼び出す必要があります。
長所は、上記の例の場合、さまざまな条件に対してさまざまな戦略セットを使用できることです (ここでは CRUD が最適な例ではない可能性があります)。したがって、データの出力方法を変更したいが、データの保存/作成/ロード方法は保持したい場合は、出力戦略を変更するだけで済みます。
短所は、渡された戦略が有効であることを確認するための型チェックがないため、戦略が正しいコンテキストであることを確認する必要があることです (予想される基本クラスである限り、どれも機能します)。そうそう、CRUDTemplate も基本クラスから派生させることができます。
データの場合、PHP では、配列が複雑なパラメーターを渡すのに最適であることがわかりました。もちろん、配列の検証を行う必要があります