アダプター パターン

Adapter Pattern

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

だてめがね
...
©️ ponpocopy

とある企業で社内SEをしています。 自身の学びが誰かの為になれば、という想いで日々ブログを更新中。 PHP(CakePHP・Laravel・FuelPHP), Pyhotn(Django・Flask), C#(ASP.NET、Unity) が好きです。