代理模式

代理,指的就是一個角色代表另一個角色採取行動,就象生活中,一個紅酒廠商,是不會直接把紅酒零售客戶的,都是通過代理來完成他的銷售業務。而客戶,也不用爲了喝紅酒而到處找工廠,他只要找到廠商在當地的代理就行了,具體紅酒工廠在那裏,客戶不用關心,代理會幫他處理。

 

代理模式,就是給某一對象提供代理對象,並由代理對象控制具體對象的引用。

 

代理模式涉及的角色:

 

抽象主題角色,聲明瞭代理主題和真實主題的公共接口,使任何需要真實主題的地方都能用代理主題代替。

代理主題角色,含有真實主題的引用,從而可以在任何時候操作真實主題,代理主題功過提供和真實主題相同的接口,使它可以隨時代替真實主題。代理主題通過持有真實主題的引用,不但可以控制真實主題的創建或刪除,可以在真實主題被調用前進行攔截,或在調用後進行某些操作。

真實代理對象,定義了代理角色所代表的具體對象。

<?php

//定義一種類型的女人,王婆和潘金蓮都屬於這個類型的女人

interface KindWomen

  //這種類型的女人能做什麼事情呢?

 public function makeEyesWithMan();//拋媚眼

  publicfunction happyWithMan();//happy what? You know that!

}

 

//定一個潘金蓮是什麼樣的人

class PanJinLian implements KindWomen

{

       public function happyWithMan() {                

                echo "潘金蓮在和男人做那個.....";

       }

       public function makeEyesWithMan() {

                echo "潘金蓮拋媚眼";

       }

}

 

//王婆這個人老聰明瞭,她太老了,是個男人都看不上,

//但是她有智慧有經驗呀,她作爲一類女人的代理!

class WangPo implements KindWomen {

       var $kindWomen;

 

       //她可以是KindWomen的任何一個女人的代理,只要你是這一類型

       public function WangPo($kindWomen = null){

                if (empty($kindWomen)) {

                        $this->kindWomen =new PanJinLian();//默認的話,是潘金蓮的代理 

                }else{

                        $this->kindWomen =$kindWomen;

                }

       }

       //自己老了,幹不了,可以讓年輕的代替

       public function happyWithMan() {

               $this->kindWomen->happyWithMan(); 

       }

        //王婆這麼大年齡了,誰看她拋媚眼?!

       public function makeEyesWithMan() {

               $this->kindWomen->makeEyesWithMan(); 

        } 

}

 

 

//定義一個西門慶,這人色中餓鬼

class XiMenQing

{

  /*

  * 水滸裏是這樣寫的:西門慶被潘金蓮用竹竿敲了一下難道,癡迷了,

  * 被王婆看到了就開始撮合兩人好事,王婆作爲潘金蓮的代理人

  * 收了不少好處費,那我們假設一下:

  * 如果沒有王婆在中間牽線,這兩個不要臉的能成嗎?難說的很!

  */

 public function __construct() {

       //把王婆叫出來

       $wangPo = new WangPo();   

       //然後西門慶就說,我要和潘金蓮happy,然後王婆就安排了西門慶丟筷子的那齣戲:

         $wangPo->makeEyesWithMan();  //看到沒,雖然表面上時王婆在做,實際上爽的是潘金蓮

         $wangPo->happyWithMan();

  }

}

 

//開搞了

$XiMengQing = new XiMenQing();

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章