博学而笃志 切问而近思 仁在其中
详情
PHP设计模式
作者:Aliot     发布时间:2017-07-02     评论:0     阅读:3

观察者模式

/**
* 定义观察接口
*/
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();



相关文章
loading......
最新动态
所有评论

loading......

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册