デリゲーションは、クラスの機能を拡張して再利用するメソッドです。これは、追加のクラスを作成して追加の機能を提供し、元のクラスのインスタンスを使用して元の機能を提供します。
確立されたタスクを関連付けられた補助オブジェクトに委任する TeamLead クラスがあるとします。 JuniorDeveloper: 元々は TeamLead が writeCode メソッドを処理し、Usage が TeamLead のメソッドを呼び出しますが、現在 TeamLead は writeCode の実装を JuniorDeveloper の writeBadCode に委任します。使用法は writeBadCode メソッドの実行を認識しません。
Usage.php
<?phpnamespace DesignPatterns\More\Delegation;// 初始化 TeamLead 并委托辅助者 JuniorDeveloper$teamLead = new TeamLead(new JuniorDeveloper());// TeamLead 将编写代码的任务委托给 JuniorDeveloperecho $teamLead->writeCode();
TeamLead.php
<?phpnamespace DesignPatterns\More\Delegation;/** * TeamLead类 * @package DesignPatterns\Delegation * `TeamLead` 类将工作委托给 `JuniorDeveloper` */class TeamLead{ /** @var JuniorDeveloper */ protected $slave; /** * 在构造函数中注入初级开发者JuniorDeveloper * @param JuniorDeveloper $junior */ public function __construct(JuniorDeveloper $junior) { $this->slave = $junior; } /** * TeamLead 喝咖啡, JuniorDeveloper 工作 * @return mixed */ public function writeCode() { return $this->slave->writeBadCode(); }}
JuniorDeveloper.php
<?phpnamespace DesignPatterns\More\Delegation;/** * JuniorDeveloper 类 * @package DesignPatterns\Delegation */class JuniorDeveloper{ public function writeBadCode() { return "Some junior developer generated code..."; }}
Test s /DelegationTest.php
<?phpnamespace DesignPatterns\More\Delegation\Tests;use DesignPatterns\More\Delegation;/** * DelegationTest 用于测试委托模式 */class DelegationTest extends \PHPUnit_Framework_TestCase{ public function testHowTeamLeadWriteCode() { $junior = new Delegation\JuniorDeveloper(); $teamLead = new Delegation\TeamLead($junior); $this->assertEquals($junior->writeBadCode(), $teamLead->writeCode()); }}