#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) ## 📖ノウハウ ## 💁トラブルシューティング