PHP

Factory Method パターン PHP

 

 

使いどころ

  • 一度生成したインスタンスに対して変更をさせない
  • 外部からインスタンスを生成させない。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つ

 

 

 

 

 

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)