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の出力:
ゴロゴロ
短い距離を飛んでいます
短い距離を飛んでいます
短い距離を飛んでいます
短い距離を飛んでいます
短い距離を飛んでいます