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();
出力結果
紅茶を淹れる お湯を沸かす 紅茶を浸す カップに注ぐ レモンを追加する コーヒーを淹れる お湯を沸かす フィルタでコーヒーをドリップする カップに注ぐ 砂糖とミルクを追加する
