委譲を利用したアダプターパターンは、新しい要求やインターフェースを持つコードを、既存のコードにシームレスに統合する方法です。
このページでは、新しいプレイヤー(Player)クラスが既存のプレイヤー(LegacyPlayer)クラスを委譲して、新しい戦闘インターフェースに適合させる方法を示しています。
このサンプルは、委譲を利用したアダプターパターンを使用して、新しい機能を既存のコードに統合する方法を示しています。
アプリケーションの柔軟性と保守性が向上し、新しい要求に対応するプロセスが簡素化されます。
<?php
interface BattleAble
{
public function attack(): void;
public function defense(): void;
public function escape(): void;
}
<?php
class Enemy implements BattleAble
{
public function attack(): void
{
echo '敵の攻撃!' . PHP_EOL;
}
public function defence(): void
{
echo '敵の防御!' . PHP_EOL;
}
public function escape(): void
{
echo '敵の逃走!' . PHP_EOL;
}
}
<?php
class LegacyPlayer
{
public function legacyAttack(): void
{
echo 'プレイヤーの攻撃!' . PHP_EOL;
}
public function legacyBadAction(): void
{
// 読みたくもない悪いコード
}
public function legacyFoolishAction(): void
{
// 触れたらバグるコード
}
public function legacyTerribleAction(): void
{
// 関わったら三ヶ月は定時で帰れなくなるコード
}
}
<?php
class Player implements BattleAble
{
private LegacyPlayer $legacyPlayer;
public function __construct(LegacyPlayer $legacyPlayer)
{
$this->legacyPlayer = $legacyPlayer;
}
public function attack(): void
{
$this->legacyPlayer->legacyAttack();
}
public function defense(): void
{
echo 'プレイヤーの防御!' . PHP_EOL;
}
public function escape(): void
{
echo 'プレイヤーの逃走!' . PHP_EOL;
}
}
<?php
$player = new Player(new LegacyPlayer);
$player->attack(); // プレイヤーの攻撃!
$enemy = new Enemy();
$enemy->attack(); // 敵の攻撃!