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();