#MOC
要求を代理人[[🗃️オブジェクト]]が受け取って処理する[[🗃️デザインパターン]]。
## 例
- 銀行取引
- クライアントが銀行取引を置こうなう際に、直接銀行のシステムにアクセスするのではなく、プロキシに任せるパターン。
- ユーザーが金額を引き出すとき、`BankProxy`はまずユーザーの残高を確認
- ユーザーが十分な残高を持っていれば、プロキシは実際の銀行に引き出しの指示をする
```mermaid
classDiagram
Bank <|.. RealBank
Bank <|.. BankProxy
BankProxy o-- RealBank
class Bank{
+withdrawMoney(int)
}
class RealBank{
+withdrawMoney(int)
}
class BankProxy{
-realBank
-userBalance
+withdrawMoney(int)
}
```
```php
interface Bank
{
public function withdrawMoney($amount): void;
}
class RealBank implements Bank
{
public function withdrawMoney($amount): void
{
echo "Withdrawing $amount from your bank account.\n";
}
}
class BankProxy implements Bank
{
private $realBank;
private $userBalance;
public function __construct($userBalance)
{
$this->realBank = new RealBank();
$this->userBalance = $userBalance;
}
public function withdrawMoney($amount): void
{
if ($amount > $this->userBalance) {
echo "You don't have enough balance in your account.\n";
} else {
$this->realBank->withdrawMoney($amount);
$this->userBalance -= $amount;
}
}
}
// Client code
$bankProxy = new BankProxy(1000);
$bankProxy->withdrawMoney(500);
$bankProxy->withdrawMoney(600);
```
## 📚ドキュメント
- [21.Proxyパターン | TECHSCORE(テックスコア)](https://www.techscore.com/tech/DesignPattern/Proxy)
## 📖ノウハウ
## 💁トラブルシューティング