#MOC 複雑なオブジェクトの構築をより直観的で順序に依存しないものにするための[[🗃️デザインパターン]] ```mermaid classDiagram PizzaBuilder <|.. CheesePizzaBuilder Waiter --> PizzaBuilder PizzaBuilder : createNewPizza() PizzaBuilder : buildSize() PizzaBuilder : buildCheese() PizzaBuilder : buildPepperoni() PizzaBuilder : buildTomato() PizzaBuilder : getPizza() class Waiter{ setPizzaBuilder(PizzaBuilder) getPizza() constructPizza() } ``` ```php class Pizza { protected $size; protected $cheese; protected $pepperoni; protected $tomato; public function setPart($name, $value) { $this->$name = $value; } } interface PizzaBuilder { public function createNewPizza(); public function buildSize(); public function buildCheese(); public function buildPepperoni(); public function buildTomato(); public function getPizza(); } class CheesePizzaBuilder implements PizzaBuilder { private $pizza; public function createNewPizza() { $this->pizza = new Pizza(); } public function buildSize() { $this->pizza->setPart('size', 'large'); } public function buildCheese() { $this->pizza->setPart('cheese', 'mozzarella'); } public function buildPepperoni() { // No pepperoni for cheese pizza } public function buildTomato() { $this->pizza->setPart('tomato', 'yes'); } public function getPizza() { return $this->pizza; } } class Waiter { private $pizzaBuilder; public function setPizzaBuilder(PizzaBuilder $pb) { $this->pizzaBuilder = $pb; } public function getPizza() { return $this->pizzaBuilder->getPizza(); } public function constructPizza() { $this->pizzaBuilder->createNewPizza(); $this->pizzaBuilder->buildSize(); $this->pizzaBuilder->buildCheese(); $this->pizzaBuilder->buildPepperoni(); $this->pizzaBuilder->buildTomato(); } } $waiter = new Waiter(); $waiter->setPizzaBuilder(new CheesePizzaBuilder()); $waiter->constructPizza(); $pizza = $waiter->getPizza(); ``` ## 📚ドキュメント - [7. Builder パターン | TECHSCORE(テックスコア)](https://www.techscore.com/tech/DesignPattern/Builder) ## 📖ノウハウ ## 💁トラブルシューティング