/**
* 什麼是代理模式呢?我很忙,忙的沒空理你,那你要找我呢就先找我的代理人吧,
* 那代理人總要知道被代理人能做哪些事情不能做哪些事情吧,那就是兩個人具備同一個接口,
* 代理人雖然不能幹活,但是被代理的人能幹活呀。
*/
// 比如西門慶找潘金蓮,那潘金蓮不好意思答覆呀,咋辦,找那個王婆做代理,表現在程序上時這樣的:
// 先定義一種類型的女人:
/**
* 定義一種類型的女人,王婆和潘金蓮都屬於這個類型的女人
*/
interface KindWomen{
//這種類型的女人能做什麼事情呢?
public function makeEyesWithMan(); //拋媚眼
public function happyWithMan(); //happy what? You know that!
}
/**
* 定義一個潘金蓮是什麼樣的人
*/
class PanJinLian implements KindWomen {
public function makeEyesWithMan(){
echo ("潘金蓮拋媚眼");
}
public function happyWithMan(){
echo ("潘金蓮在和男人做那個.....");
}
}
//再定一個醜陋的王婆:
/**
* 王婆這個人老聰明瞭,她太老了,是個男人都看不上,
* 但是她有智慧有經驗呀,她作爲一類女人的代理!
*/
class WangPo implements KindWomen {
private $kindWomen;
/**
* 她可以是KindWomen的任何一個女人的代理,只要你是這一類型
* 默認的話,是潘金蓮的代理
* @param null|KindWomen $kindWomen
*/
public function __construct($kindWomen = null){
if(is_object($kindWomen) || $kindWomen instanceof KindWomen){
$this->kindWomen = $kindWomen;
}else{
$this->kindWomen = new PanJinLian();
}
}
public function makeEyesWithMan(){
$this->kindWomen->makeEyesWithMan(); //王婆這麼大年齡了,誰看她拋媚眼?!
}
public function happyWithMan() {
$this->kindWomen->happyWithMan(); //自己老了,幹不了,可以讓年輕的代替
}
}
// 兩個女主角都上場了,男主角也該出現了:
/**
* 定義一個西門慶,這人色中餓鬼
*/
class XiMenQing {
/**
* 水滸裏是這樣寫的:西門慶被潘金蓮用竹竿敲了一下難道,癡迷了,
* 被王婆看到了, 就開始撮合兩人好事,王婆作爲潘金蓮的代理人
* 收了不少好處費,那我們假設一下:
* 如果沒有王婆在中間牽線,這兩個不要臉的能成嗎?難說的很!
*/
public function __construct() {
//把王婆叫出來
$wangPo = new WangPo();
//然後西門慶就說,我要和潘金蓮happy,然後王婆就安排了西門慶丟筷子的那齣戲:
$wangPo->makeEyesWithMan(); //看到沒,雖然表面上時王婆在做,實際上爽的是潘金蓮
echo "<br><br><br><br>";
$wangPo->happyWithMan();
echo "<br><br><br><br>";
//改編一下歷史,賈氏被西門慶勾走:
$jiaShi = new JiaShi();
$wangPo = new WangPo($jiaShi); //讓王婆作爲賈氏的代理人
$wangPo->makeEyesWithMan();
echo "<br><br><br><br>";
$wangPo->happyWithMan();
echo "<br><br><br><br>";
}
}
/*
* 那這就是活生生的一個例子,通過代理人實現了某種目的,如果真去掉王婆這個中間環節,直接是西
* 門慶和潘金蓮勾搭,估計很難成就武松殺嫂事件。
* 那我們再考慮一下,水滸裏還有沒有這類型的女人?有,盧俊義的老婆賈氏(就是和那個固管家苟合
* 的那個),這名字起的:“假使”,那我們也讓王婆做她的代理:
*/
// 把賈氏素描出來:
class JiaShi implements KindWomen {
public function makeEyesWithMan(){
echo ("賈氏拋媚眼");
}
public function happyWithMan(){
echo ("賈氏正在Happy中......");
}
}
// 西門慶勾賈氏:看上面類XiMenQing
new XiMenQing();
運行結果如下:
潘金蓮拋媚眼
潘金蓮在和男人做那個.....
賈氏拋媚眼
賈氏正在Happy中......