php核心學習-設計模式的學習-委託模式

來源:互聯網
上載者:User
委託者模式

為其它對象提供一種代理以控制對這個對象的訪問

簡單的理解如下圖所示:

下面我們匯入一個情境來學習委託者模式:
電商網站上面現在賣有茶軸鍵盤,電扇網站會員和電扇網站普通會員買的折扣是不一樣的,現在我們類比不同使用者購買鍵盤訂單的價格。
首先,建立了以下的目錄結構

其中user就是我們項目的委託者代理
實體:
keyboard.php

<?phpclass keyboard{    //鍵盤價格    public function getPrice() {        return 1500;    }}

使用者等級
普通使用者noruser.php

<?php/** * Class noruser * 普通使用者類 */class noruser{    //普通會員折扣    public function getDisCount() {        return 0.95;    }}

網站會員使用者vipuser.php

<?php/** * 網站會員 */class vipuser{    //電商網站會員折扣    public function getVipDisCount() {        return 0.5;    }}

委託者代理
user.php

<?php//使用者代理程式類class user{    public $delegator=null;//委託者對象    function __call($name, $arguments)    {        // TODO: Implement __call() method.        if ($this->delegator!=null) {           return call_user_func_array([$this->delegator,$name],$arguments);        }        return false;    }}

類比返回商品價格
order.php

<?php/** * 類比示範使用委託這模式返回商品價格 */require ("keyboard.php");require ('user.php');require ('noruser.php');require ("vipuser.php");$user=new user();$keyboard=new keyboard();$user->delegator=new vipuser();$user->getVipDisCount();echo "會員購買茶軸鍵盤的價格是:".$keyboard->getPrice()*$user->getVipDisCount();echo "<br/>";$user->delegator=new noruser();echo "會員購買茶軸鍵盤的價格是:".$keyboard->getPrice()*$user->getDisCount();

效果如下:

優點:
1.職責清晰 真實的角色就是實現的商務邏輯,不用關心其他非本指責的事務
2.高擴充性 具體主題角色不能怎麼變化,只要它實現了介面,代理類完全可以在不做任何修改的情況下使用
3.智能化 動態代理是最好的體現,即在運行階段才指定實際代理對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.