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