使いどころ
- 一度生成したインスタンスに対して変更をさせない
- 外部からインスタンスを生成させない。Robot::creteRedRobot(), Robot::createBlueRobot()からのみ生成が可能
<?php
class Robot
{
private $name = '';
private $color;
public static function createRedRobot($name_){
return new self($name_, 'red');
}
public static function createBlueRobot($name_){
return new self($name_, 'blue');
}
// constructをprivateにしているのが大事。
// createRedRobot(), createBlueRobot()からのみインスタンスを生成できる
private function __construct($name_, $color_){
$this->setName($name_);
$this->color = $color_;
}
public function setName($name_){
$this->name = (string) $name_;
}
public function getName(){
return $this->name;
}
public function getColor(){
return $this->color;
}
}
$yuuRobot = Robot::createRedRobot('優ロボット');
echo $yuuRobot->getName(); // 優ロボット
echo $yuuRobot->getColor(); // red
$yuuRobot->__construct('優ロボット', 'yellow'); // 無効
echo $yuuRobot->getColor(); // 表示されない
$yuuRobot = Robot::createBlueRobot('優2ロボット'); // 無効 上書きされない
echo $yuuRobot->getName(); // 表示されない
echo $yuuRobot->getColor(); // 表示されない
$yuu3Robot = Robot::createBlueRobot('優3ロボット'); // 無効 上書きされない
echo $yuu3Robot->getName(); // 表示されない
echo $yuu3Robot->getColor(); // 表示されない
表示
優ロボットred
- constructをprivateにしているのが重要
- static functionで指定したcreateRedRobot(), createBlueRobot()からのみインスタンスを生成できる
- 一度作ったインスタンスに対して、プロパティを上書きさせない
- インスタンスは1つ
![PHP Factory Methodパターン [PHPによるデザインパターン入門]](https://www.yuulinux.tokyo/contents/wp-content/uploads/2017/09/phpDP_20190407_1-150x150.jpg)
