간단한 공장 완전히 생성 로직 구현
가지 방법 (또는 하나 switch
)와 간단한 클래스. PHP에서는 다음과 같이 보일 수 있습니다 :
tommorow를 지원해야하는 경우이 클래스 구현을 변경해야합니다. 여기에는 하위 클래스가 없습니다.이 클래스는 Animal
생성에 대한 모든 것을 알고 있습니다.
공장 방법
는 Animal
일부 proccessing을 수행하지만, 아직 생성하는 Animal
방법을 알고하지 않거나 클래스가있을 때 당신이 것을 결정합니다 서브 클래스를 가질 therfore 싶은, 무엇을 사용 . 그래서 우리는 sucblasses가 오버라이드 (override) 할 수있는 팩토리 메소드를 작성합니다.
abstract Class MyAnimalProcess
{
abstract function CreateAnimal();
public function Process()
{
$animal = $this->CreateAnimal();
...
...
}
}
class DogProcess extends MyAnimalProcess
{
function CreateAnimal()
{
return new Dog();
}
}
그래서, 여기 당신은하고
Animal
에 무언가를 추상 클래스 만의 서브 클래스가 될 것이다
Animal
결정하도록 할 수 있습니다. "공장"클래스 -
추상 공장
공장의 한 단계 앞으로 방법, 위임 다른 클래스의 생성을 가져 가라.
그래서 상속보다는 구성을 사용합니다.
abstract class AnimalFactory
{
public abstract function CreatePet();
public abstract function CreateWildAnimal();
}
class DogAnimalFactory extends AnimalFactory
{
public function CreatePet()
{
retrun new Dog();
}
public function CreateWildAnimal()
{
return new AfricanWildDog();
}
}
class CatAnimalFactory extends AnimalFactory
{
public function CreatePet()
{
retrun new Cat();
}
public function CreateWildAnimal()
{
return new Tiger();
}
}
class MyAnimalProcess
{
function __construct($animalFactory) {
$this->factory = $animalFactory;
}
public function ProcessPet()
{
$animal = $this->factory->CreatePet();
...
...
}
public function ProcessWild()
{
$animal = $this->factory->CreateWild();
...
...
}
}