php几种设计模式

header('Content-type:text/html;charset=utf8');
/* 单例模式 */
class Site 
{
    public $siteName;
    protected static $instance = null;
    private function __construct($siteName)
    {
        $this->siteName = $siteName;
    }
    public static function getInstance($siteName='php中文网')
    {
        if(!self::$instance instanceof self){
            self::$instance = new self($siteName);
        }
        return self::$instance;
    }
}
/* 工厂模式 */

class Factory
{
    public static function create(){
        return Site::getInstance('php.cn');
    }
}
/* 对象注册树 */
// 1·注册 set()
// 2·获取 get()
// 3·注销_unset()
class Register
{
    // 创建对象池,数组
    protected static $objects = [];
    // 生成对象,并放到树中
    public static function set($alias, $objects){
        self::$objects[$alias] = $objects;
    }
    // 获取树中的对象
    public static function get($alias){
        return self::$objects[$alias];
    }
    // 移除注册树中的对象
    public static function _unset($alias){
        unset(self::$objects[$alias]);
    }
}

// 将Site类的实例上树,放到对象池
Register::set('site', Factory::create());
// 从树上获取一个对象
$obj = Register::get('site');
var_dump($obj);
echo "<hr>";
echo $obj->siteName;


/* 策略模式 */
abstract class baseAgent { //抽象策略类
    abstract function PrintPage();
}
//用于客户端是IE时调用的类(环境角色)
class ieAgent extends baseAgent {
    function PrintPage() {
        return 'IE';
    }
}
//用于客户端不是IE时调用的类(环境角色)
class otherAgent extends baseAgent {
    function PrintPage() {
        return 'not IE';
    }
}
class Browser { //具体策略角色
    public function call($object) {
            return $object->PrintPage ();
        }
    }
    $bro = new Browser ();
echo $bro->call ( new ieAgent () );
0
如无特殊说明,文章均为本站原创,转载请注明出处
  • 转载请注明来源:php几种设计模式
  • 本文永久链接地址:http://www.mobanw.com/php/208.html

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到