博客列表 >php设计模式——2018年5月10日

php设计模式——2018年5月10日

沈斌的博客
沈斌的博客原创
2018年05月10日 07:43:26829浏览

单例模式,工厂模式用于创建实例,注册树模式用来管理创建的实例


单例模式 Singleton.php


实例

<?php
/**
 *
 */
class Singleton
{
    private static $instance=null;
    private $setting=[];

    private function __construct()
    {

    }

    private function __clone()
    {
    }

    public static function getInstance(){
        if (self::$instance == null) {
            self::$instance=new self();
        }

        return self::$instance;
    }

    public function set($index,$value){
        $this->setting[$index]=$value;
    }

    public function get($index){
        return $this->setting[$index];
    }
}
//$obj1,$obj2 同一个对象
$obj1=Singleton::getInstance();
$obj2=Singleton::getInstance();

var_dump($obj1,$obj2);

$obj1->set('pass','root');
echo $obj1->get('pass');

运行实例 »

点击 "运行实例" 按钮查看在线实例


工厂模式 Factory.php

实例

<?php
/**
 *
 */

class Factory
{
    public static function create($type,$price){
        switch ($type){
            case 'apple':
                return new Apple($price);
                break;

            case 'xiaomi':
                return new Xiaomi($price);
                break;
        }
    }
}

class  Apple
{
    private $price;

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

    public function price(){
        return $this->price;
    }
}

class Xiaomi
{
    private $price;

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

    public function price(){
        return $this->price;
    }
}

$apple=Factory::create('apple',5000);
echo $apple->price();

echo '<hr>';

$xiaomi=Factory::create('xiaomi',3000);
echo $xiaomi->price();

运行实例 »

点击 "运行实例" 按钮查看在线实例


注册树 Registry.php

实例

<?php
/**
 *
 */
class Demo1{}
class Demo2{}
class Demo3{}

class Registry
{
    public static $objs=[];

    public static function set($index,$obj){
        self::$objs[$index]=$obj;
    }

    public static function get($index){
        return self::$objs[$index];
    }

    public static function del($index){
        unset(self::$objs[$index]);
    }
}

//类实现注册到注册树
Registry::set('demo1',new Demo1());
Registry::set('demo2',new Demo2());
Registry::set('demo3',new Demo3());

var_dump(Registry::$objs);
echo '<hr>';

echo '<pre>';
print_r(Registry::$objs);

echo '<hr>';
var_dump(Registry::get('demo1'));

//del
echo '<hr>';
Registry::del('demo1');
var_dump(Registry::get('demo1'));

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议