+ -
当前位置:首页 → 问答吧 → PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)

PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)

时间:2008-08-05

来源:互联网

有太多的人想了解设计模式,今天无事在此发表一下,希望对想了解设计模式的道友有所帮助,觉的好的朋友帮忙顶一下,让更多的朋友一起来了解 对这些东西感兴趣的可以去我的空间看看 http://home.phpchina.com/space.php?uid=71501

观察者模式
复制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(); //通过所有有效的观察者

作者: yangl2006   发布时间: 2008-08-05

策略模式

本帖隐藏的内容需要回复才可以浏览

作者: yangl2006   发布时间: 2008-08-05

简单工厂模式

本帖隐藏的内容需要回复才可以浏览

作者: yangl2006   发布时间: 2008-08-05

先回一个

作者: wwwjyw8   发布时间: 2008-08-05

放一个出来,再回帖看....................

作者: lxylxy888666   发布时间: 2008-08-06

作者: 七月十五   发布时间: 2008-08-06

LZ太不HD。。这帖明明在高级区发过。。。还在这里发。。

作者: 生命如蓝   发布时间: 2008-08-06

高级区我是单个发的,没放在一起,有朋友说希望能放在一起,所在这个区里就放在一起了,原来高级区的也不改了,如果以后再发类似就一起发了,如果感觉的不好的还请见谅

作者: yangl2006   发布时间: 2008-08-06

作者: 夜雨飘零   发布时间: 2008-08-06

作者: mmca   发布时间: 2008-08-07

学习了 真不错 谢谢

作者: jianzhong111   发布时间: 2008-08-12

学习了

作者: joj_79   发布时间: 2008-08-12

回一个先

作者: kemy88   发布时间: 2008-08-12

up

作者: panjinww   发布时间: 2008-08-13

作者: wybmzyb   发布时间: 2008-08-13

作者: wybmzyb   发布时间: 2008-08-13

受教了

作者: BlueFlu   发布时间: 2008-08-14

\

作者: BlueFlu   发布时间: 2008-08-14

作者: haha_zhi   发布时间: 2008-08-14

学习一下~~~~~刚开始学面向对象~~~~~~

作者: elsonwu   发布时间: 2008-08-14

作者: scc_166   发布时间: 2008-08-15

LOOK LOOK

作者: xufeng8510   发布时间: 2008-08-15

为了看文章只好顶顶

作者: numsix   发布时间: 2008-08-15

作者: 小星   发布时间: 2008-08-15

很深奥,不知道我什么时候才能明白。

作者: happyboy   发布时间: 2008-08-16

iiiiiiiiiiiiiiiiiiiiiiiii

作者: martin2008   发布时间: 2008-08-19

sefg

作者: ljxok2001   发布时间: 2008-08-19

支持一下,哈

作者: slfyeye   发布时间: 2008-08-19

作者: kakashilw   发布时间: 2008-08-19

必须回贴..

作者: 银子   发布时间: 2008-08-19

工厂模式很关心,看看

作者: Fish_sl   发布时间: 2008-08-19

放一个出来,再回帖看....................

作者: mall333   发布时间: 2008-08-19

先看下 吧3!

作者: lanye   发布时间: 2008-08-20

作者: lzrabbit   发布时间: 2008-08-20

作者: vfasky   发布时间: 2008-08-20

作者: lin_chaoqi   发布时间: 2008-08-21