#MOC
共通点を基底クラスにもたせて、派生クラスに[[🗃️インスタンス生成]]の処理を定義するパターン。
```mermaid
classDiagram
AnimalFactory <|.. DogFactory
AnimalFactory <|.. CatFactory
DogFactory : +createAnimal()
CatFactory : +createAnimal()
Animal <|.. Dog
Animal <|.. Cat
Animal : +makeSound()
Dog : +makeSound()
Cat : +makeSound()
class AnimalFactory{
+createAnimal()
+makeAnimalMakeSound()
}
class DogFactory{
+createAnimal()
}
class CatFactory{
+createAnimal()
}
```
```php
abstract class Animal
{
abstract public function makeSound();
}
class Dog extends Animal
{
public function makeSound() {
echo "Woof!\n";
}
}
class Cat extends Animal
{
public function makeSound() {
echo "Meow!\n";
}
}
abstract class AnimalFactory
{
abstract public function createAnimal();
public function makeAnimalMakeSound() {
$animal = $this->createAnimal();
$animal->makeSound();
}
}
class DogFactory extends AnimalFactory
{
public function createAnimal() {
return new Dog();
}
}
class CatFactory extends AnimalFactory
{
public function createAnimal() {
return new Cat();
}
}
// Client code
$dogFactory = new DogFactory();
$dogFactory->makeAnimalMakeSound(); // Outputs: Woof!
$catFactory = new CatFactory();
$catFactory->makeAnimalMakeSound(); // Outputs: Meow!
```
## 📚ドキュメント
- [4. FactoryMethod パターン | TECHSCORE(テックスコア)](https://www.techscore.com/tech/DesignPattern/FactoryMethod)
## 📖ノウハウ
## 💁トラブルシューティング