<?php
interface Builder
{
public function stapleFood(string $stapleFood):void;
public function mainDish(string $mainDish):void;
public function soup(string $soup):void;
public function salad(string $salad):void;
public function getResult();
}
・DinnerBuilder.php
<?php
require_once 'Builder.php';
class DinnerBuilder implements Builder
{
private string $stapleFood;
private string $mainDish;
private string $soup;
private string $salad;
public function stapleFood(string $stapleFood): void
{
$this->stapleFood = $stapleFood;
}
public function mainDish(string $mainDish): void
{
$this->mainDish = $mainDish;
}
public function soup(string $soup): void
{
$this->soup = $soup;
}
public function salad(string $salad): void
{
$this->salad = $salad;
}
public function getResult(): dinnerBuilder
{
return $this;
}
}
・Director.php
<?php
require_once 'Builder.php';
class Director
{
private Builder $builder;
public function __construct(Builder $builder){
$this->builder = $builder;
}
public function makeSteakSetMeal(): void
{
$this->builder->stapleFood("rice");
$this->builder->mainDish("steak");
$this->builder->soup("onion soup");
$this->builder->salad("potato salad");
}
public function addStapleFood(string $stapleFood): void
{
$this->builder->stapleFood($stapleFood);
}
public function addMainDish(string $mainDish): void
{
$this->builder->mainDish($mainDish);
}
public function addSoup(string $soup): void
{
$this->builder->soup($soup);
}
public function addSalad(string $salad): void
{
$this->builder->salad($salad);
}
}
・index.php
<?php
require_once 'DinnerBuilder.php';
require_once 'Director.php';
$builder1 = new DinnerBuilder();
$director1 = new Director($builder1);
$director1->makeSteakSetMeal();
var_dump($builder1);
$builder2 = new DinnerBuilder();
$director2 = new Director($builder2);
$director2->addStapleFood("bread");
$director2->addMainDish("hamburg steak");
$director2->addSalad("caesar salad");
var_dump($builder2);
a, b, c, dという4つの列の複合インデックスがあった場合は、a,bを条件に検索するときも使えるので先に定義しておく。cを条件にすることが多い場合は、c, a, b, dなどの順で定義するといい。こうすることで新たなインデックスの作成を減らせる。インデックスの数が多いと更新処理のパフォーマンスに影響する。