ホームページ > バックエンド開発 > PHPチュートリアル > PHP デザイン パターン シリーズ -- 委任パターン

PHP デザイン パターン シリーズ -- 委任パターン

WBOY
リリース: 2016-06-23 13:18:58
オリジナル
995 人が閲覧しました

1. パターン定義

デリゲーションは、クラスの機能を拡張して再利用するメソッドです。これは、追加のクラスを作成して追加の機能を提供し、元のクラスのインスタンスを使用して元の機能を提供します。

確立されたタスクを関連付けられた補助オブジェクトに委任する TeamLead クラスがあるとします。 JuniorDeveloper: 元々は TeamLead が writeCode メソッドを処理し、Usage が TeamLead のメソッドを呼び出しますが、現在 TeamLead は writeCode の実装を JuniorDeveloper の writeBadCode に委任します。使用法は writeBadCode メソッドの実行を認識しません。

2. UML クラス図

3. サンプルコード

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...";    }}
ログイン後にコピー

4. テストコード

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());    }}
ログイン後にコピー
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート