Adapter パターン | デザインパターン
2022年9年24日
デザインパターン
Adapter
PHP
オライリージャパンによる Head First シリーズ デザインパターン(第2版)第7章 Adapter パターンを、 PHPで書き直してみようという試みです。
Duck.php
namespace Adapter; interface Duck { public function quack(); public function fly(); }
MallardDuck.php
namespace Adapter; class MallardDuck implements Duck { public function quack() : void { echo 'ガーガー'; echo "\n"; } public function fly() : void { echo '飛んでいます'; echo "\n"; } }
Turkey.php
namespace Adapter; interface Turkey { public function gobble() : void; public function fly() : void; }
WildTurkey.php
namespace Adapter; class WildTurkey implements Turkey { public function gobble () : void { echo 'ゴロゴロ'; echo "\n"; } public function fly() : void { echo '短い距離を飛んでいます '; echo "\n"; } }
TurkeyAdapter.php
namespace Adapter; class TurkeyAdapter implements Duck { public Turkey $turkey; public function __construct(Turkey $turkey){ $this->turkey = $turkey; } public function quack() : void { $this->turkey->gobble(); } public function fly() : void { for($i = 0; $i < 5; $i++) $this->turkey->fly(); } }
index.php
use Adapter\MallardDuck; use Adapter\WildTurkey; use Adapter\TurkeyAdapter; $duck = new MallardDuck(); $turkey = new WildTurkey(); $turkeyAdapter = new TurkeyAdapter($turkey); echo 'Turkeyの出力:' . "\n"; $turkey->gobble(); $turkey->fly(); echo 'Duckの出力:' . "\n"; $duck->quack(); $duck->fly(); echo 'TurkeyAdapterの出力:' . "\n"; $turkeyAdapter->quack(); $turkeyAdapter->fly();
出力結果
Turkeyの出力: ゴロゴロ 短い距離を飛んでいます Duckの出力: ガーガー 飛んでいます TurkeyAdapterの出力: ゴロゴロ 短い距離を飛んでいます 短い距離を飛んでいます 短い距離を飛んでいます 短い距離を飛んでいます 短い距離を飛んでいます