전략 방법은 템플릿 방법 잘 작동을 고려하십시오.
템플릿 메서드는 클래스 요구 사항을 지정합니다. 전략 방법을 사용하면 객체를 사용하여 동작을 정의하고 종속성 주입을 사용하여 런타임에 정의 할 수 있습니다.
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);
}
}
샘플 코드는 바로 전략의 각 호출 템플릿 기능을 보여줍니다 동안
는, 더는 입력 initisation 등의 검증으로 템플릿 기능의 전문 오버로드 된 버전에서 수행 할 수 있습니다. 결국 무엇인가 전략을 호출해야합니다.
위 예제에서 서로 다른 조건에 대해 서로 다른 전략을 사용할 수 있습니다 (CRUD가 여기서는 가장 좋은 예가 아닐 수도 있습니다). 따라서 데이터가 출력되는 방식을 변경하고 저장/생성 /로드 방식을 유지하려면 출력 전략을 변경하기 만하면됩니다.
당신이 전달하는 전략이 올바른지 확인하기위한 유형 검사가 없으므로 전략이 올바른 상황에 맞는지 확인해야한다는 단점이 있습니다 (기대되는 기본 클래스). 오 그래, CRUDTemplate도 기본 클래스에서 파생 될 수 있습니다.
PHP의 경우 배열이 복잡한 매개 변수를 전달하는 데 가장 적합하다는 것을 알았습니다. 물론 배열의 유효성 검사를 수행해야합니다.