1、单例模式
每个类只会产生一个实例化对象
PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操 作。因为每一次new操作都会消耗系统和内存的资源
class Single{ public static function getInstance() { if(!self:$instance instanceof Test) { self::$instance=new Single; } return self::$instance; } }
2、工厂模式
工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式
class nbaPlay{ public function say(){ echo "我在说话"; } } class goods{ public function order(){ echo "订单列表"; } } //$NbaPlay=new NbaPlayer(); //$Goods=new Goods(); class Factory{ public static function setObj($className){ $obj=new $className(); return $obj; } } $NbaPlay=Factory::setObj("NbaPlay"); $goods=Factory::setObj("Goods"); $goods->order();
3、策略模式
策略模式,将一组特定的行为和算法封装成类
首先声明策略的接口文件,约定了策略的包含的行为。然后,定义各个具体的策略实现类
UserStrategy.php <?php /* * 声明策略文件的接口,约定策略包含的行为。 */ interface UserStrategy { function showAd(); function showCategory(); }
FemaleUser.php <?php require_once 'UserStrategy.php';
class FemaleUser implements UserStrategy {
function showAd(){
echo "2016冬季女装";
}
function showCategory(){
echo "女装";
}
}
MaleUser.php <?php require_once 'UserStrategy.php'; class MaleUser implements UserStrategy { function showAd(){ echo "IPhone6s"; } function showCategory(){ echo "电子产品"; } }
Page.php//执行文件 <?php require_once 'MaleUser.php';
require_once 'FemaleUser.php'; class Page { protected $strategy; function index(){ echo "AD"; $this->strategy->showAd(); echo "<br>"; echo "Category"; $this->strategy->showCategory(); echo "<br>"; } function setStrategy(UserStrategy $strategy){ $this->strategy=$strategy; } } $page = new Page(); if(isset($_GET['male'])){ $strategy = new MaleUser(); }else { $strategy = new FemaleUser(); } $page->setStrategy($strategy); $page->index();
4、观察者模式
当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新, 适用场景:场景:一个事件发生后,要执行一连串更新操作。
定义一个事件触发抽象类。
abstract class EventGenerator{ private $observers = array(); function addObserver(Observer $observer){ $this->observers[]=$observer; } function notify(){ foreach ($this->observers as $observer){ $observer->update(); } } }
定义一个观察者接口
interface Observer{ function update();//这里就是在事件发生后要执行的逻辑 }
//一个实现了EventGenerator抽象类的类,用于具体定义某个发生的事件 class Event extends EventGenerator{ function triger(){ echo "Event<br>"; } } class Observer1 implements Observer{ function update(){ echo "逻辑1<br>"; } } class Observer2 implements Observer{ function update(){ echo "逻辑2<br>"; } } $event = new Event(); $event->addObserver(new Observer1()); $event->addObserver(new Observer2()); $event->triger(); $event->notify();