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