哪些彩票網(wǎng)站可做代理賺錢推廣網(wǎng)站怎么制作
一、觀察者模式
-
當(dāng)一個對象狀態(tài)發(fā)生改變時,依賴它的對象全部會收到通知,并自動更新
-
場景:一個事件發(fā)生后,要執(zhí)行一連串更新操作。傳統(tǒng)的編程方式,就是在事件的代碼之后直接加入處理邏輯。當(dāng)更新的邏輯增多之后,代碼會變得難以維護。這種方式是藕合的,侵入式的,增加新的邏輯需要修改事件主體的代碼
-
觀察者模式實現(xiàn)了低耦合,非侵入式的通知與更新機制
<?php
?
interface watcher{public function update();
}
?
abstract class watch{private $watchArr = array();public function addWatchArr(watcher $watcher){$this->watchArr[] = $watcher;}public function notify(){foreach($this->watchArr as $value){$value->update();}}
}
?
class watcher1 implements watcher{public function update(){echo "update watcher1";}
}
?
class watcher2 implements watcher{public function update(){echo "update watcher2";}
}
?
?
class main extends watch{public function test(){echo "update1";$watcher1 = new watcher1();$watcher2 = new watcher2();$this->addWatchArr($watcher1);$this->addWatchArr($watcher2);$this->notify();
?}
}
?
$main = new main();
$main->test();
上面的interface{} 為每個實例提供了統(tǒng)一的方法,那么抽象方法提供了添加實例以及統(tǒng)一遍歷實例的方法。
二、適配器模式
-
適配器模式,可以將截然不同的函數(shù)接口封裝成統(tǒng)一的API
-
實際應(yīng)用舉例,PHP 的數(shù)據(jù)庫操作有mysql,mysqli 等,可以通過適配器模式統(tǒng)一成一致
interface database{public function connect();public function query();
?public function delete();
}
?
class mysql implements database{public function connect(){
?}
?public function query(){
?}
?public function delete(){}
}
三、策略模式
-
策略模式,將一組特定的行為和算法封裝成類,以適應(yīng)某些特定的上下文環(huán)境,這種模式就是策略模式
-
使用策略模式可以實現(xiàn)IOC,依賴倒置、控制反轉(zhuǎn)
<?php
interface advertise{public function show();
}
?
?
class man implements advertise{ public function show(){echo "顯示man";}
}
?
?
class woman implements advertise{public function show(){echo "顯示woman";}
}
?
?
class showindex{private $advertise;public function addObject(advertise $advertise){$this->advertise = $advertise;}public function index(){$this->advertise->show();}
}
?
?
$showindex = new showindex();
$women = new woman();
$showindex->addObject($women);
$showindex->index();
四、裝飾器模式
-
裝飾器模式,可以動態(tài)地添加修改類的功能
-
一個類提供了一項功能,如果修改并添加額外的功能,傳統(tǒng)的編程模式,需要寫一個子類繼承它,并重新實現(xiàn)類的方法
-
使用裝飾器模式,僅需在運行時添加一個裝飾器對象即可實現(xiàn),可以實現(xiàn)最大的靈活性
interface drawInterface{public function beforeDraw();public function afterDraw();
}
?
class Draw{
?private $addDraw = array();public function addDrwa(drawInterface $draw){$this->addDraw[] = $draw;}private function beforeDraw(){foreach($this->addDraw as $row){$row->beforeDraw();}}
?private function afterDraw(){$t = array_reverse($this->addDraw);foreach($t as $row){$row->afterDraw();}}public function show(){$this->beforeDraw();echo "*";$this->afterDraw();}
}
?
?
class A implements drawInterface{public function beforeDraw(){echo "<h1>";}public function afterDraw(){echo "</h1>";}
}
?
class B implements drawInterface{public function beforeDraw(){echo "<h2>";}public function afterDraw(){echo "</h2>";}
}
?
$draw = new Draw();
$draw->addDrwa(new A());
$draw->addDrwa(new B());
$draw->show();