テンプレートメソッド パターン

Template Method Pattern

Template Method パターン | デザインパターン

2022年9年24日
デザインパターン Template Method PHP
...

オライリージャパンによる Head First シリーズ デザインパターン(第2版)第8章 Template Method パターンを、 PHPで書き直してみようという試みです。

CaffeineBeverage.php

 
namespace TemplateMethod;

abstract class CaffeineBeverage {

  final public function prepareRecipe() : void {

    self::boilWater();
    $this->brew();
    self::pourInCup();
    $this->addCondiments();
    echo "\n";

  }

  public function boilWater() : void {

    echo 'お湯を沸かす';
    echo "\n";

  }

  abstract function brew() : void;

  public function pourInCup() : void {

    echo 'カップに注ぐ';
    echo "\n";

  }

  abstract function addCondiments() : void;

}
 

Coffee.php

 
namespace TemplateMethod;

class Coffee extends CaffeineBeverage {

  public function brew() : void {

    echo 'フィルタでコーヒーをドリップする';
    echo "\n";

  }

  public function addCondiments() : void {

    echo '砂糖とミルクを追加する';
    echo "\n";

  }

}
 

Tea.php

 
namespace TemplateMethod;

class Tea extends CaffeineBeverage {

  public function brew() : void {

    echo '紅茶を浸す';
    echo "\n";

  }

  public function addCondiments() : void {

    echo 'レモンを追加する';
    echo "\n";

  }

}
 

index.php

 
use TemplateMethod\Tea;
use TemplateMethod\Coffee;

$tea = new Tea();
$coffee = new Coffee();

echo'紅茶を淹れる' . "\n";
$tea->prepareRecipe();

echo'コーヒーを淹れる' . "\n";
$coffee->prepareRecipe();
 

出力結果

 
  紅茶を淹れる
  お湯を沸かす
  紅茶を浸す
  カップに注ぐ
  レモンを追加する

  コーヒーを淹れる
  お湯を沸かす
  フィルタでコーヒーをドリップする
  カップに注ぐ
  砂糖とミルクを追加する
 

だてめがね
...
©️ ponpocopy

とある企業で社内SEをしています。 自身の学びが誰かの為になれば、という想いで日々ブログを更新中。 PHP(CakePHP・Laravel・FuelPHP), Pyhotn(Django・Flask), C#(ASP.NET、Unity) が好きです。