程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP設計模式實例之(觀察者模式、策略模式、簡單工廠模式)

PHP設計模式實例之(觀察者模式、策略模式、簡單工廠模式)

編輯:PHP綜合

觀察者模式

/**
* 定義觀察接口
*/
interface Subject
{
  public function Attach($Observer); //添加觀察者
  public function Detach ($Observer); //踢出觀察者
  public function Notify(); //滿足條件時通知觀察者
   public function SubjectState($Subject); //觀察條件
}
/**
* 觀察類的具體實 現
*/
class Boss Implements Subject
{
  public $_action;

  private $_Observer;

  public function Attach($Observer)
  {
     $this->_Observer[] = $Observer;
  }

  public function Detach ($Observer)
  {
    $ObserverKey = array_search($Observer, $this- >_Observer);

    if($ObserverKey !== false)
    {
       unset($this->_Observer[$ObserverKey]);
    }
  }

  public function Notify()
  {
    foreach($this->_Observer as $value )
    {
       $value->Update();
    }
  }

  public function SubjectState($Subject)
  {
    $this->_action = $Subject;
  }
}
/**
* 抽象觀察者
*
*/
abstract class Observer
{
  protected $_UserName;

  protected $_Sub;

  public function __construct($Name,$Sub)
  {
    $this->_UserName = $Name;
    $this->_Sub = $Sub;
  }

  public abstract function Update(); //接收通過方法
}
/**
* 觀察者
*/
class StockObserver extends Observer
{
  public function __construct($name,$sub)
  {
     parent::__construct($name,$sub);
  }

  public function Update()
   {
    echo $this->_Sub->_action.$this->_UserName." 你趕快 跑...";
  }
}
$huhansan = new Boss(); //被觀察者
$gongshil = new StockObserver("三毛",$huhansan); //初始化觀察者
$huhansan->Attach ($gongshil); //添加一個觀察者
$huhansan->Attach($gongshil); //添加一個相同的觀察者
$huhansan->Detach($gongshil); //踢出基中一個觀察者
$huhansan- >SubjectState("警察來了"); //達到滿足的條件
$huhansan->Notify(); //通 過所有有效的觀察者

策略模式

/**
* 定義支持算法的接口
*
*/
abstract class Strategy
{
  abstract public function AlgorithmInterface();
}
class ConcreateStratA extends Strategy
{
   public function AlgorithmInterface()
  {
    echo "算法A";
   }
}
class ConcreateStratB extends Strategy
{
  public function AlgorithmInterface()
  {
    echo "算法B";
  }
}
class ConcreateStratC extends Strategy
{
  public function AlgorithmInterface()
  {
    echo "算法C";
  }
}
class Context
{
  private $_StrObj;

  public function __construct($strobj)
  {
    $this->_StrObj = $strobj;
  }

  public function ContextInterface()
  {
    $this->_StrObj- >AlgorithmInterface();
  }
}
$context = new Context(new ConcreateStratA);
$context->ContextInterface();
$context = new Context(new ConcreateStratC);
$context->ContextInterface();
$context = new Context(new ConcreateStratB);
$context->ContextInterface();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved