博客列表 >单例,工厂,注册模式案例——2018年5月9日

单例,工厂,注册模式案例——2018年5月9日

JackBlog
JackBlog原创
2018年05月14日 12:44:57634浏览

实例

<?php
/**
 * 单例模式:单一实例,一个类仅允许实例化一次
 * 例如:
 * 1、一个站点仅仅创建出一个数据库连接对象就够了
 * 2、一个站点仅仅需要一个配置类对象就够了
 *
 */

class Write
{
    private static $instance=null;
    private $content = [];

    private function __construct()
    {
    }
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }
    public static function Instance()
    {
        if(self::$instance==null){
            self::$instance = new self();
        }
        return self::$instance;
    }

}
$instance = Write::Instance();
$instance1 = Write::Instance();
var_dump($instance,$instance1);

运行实例 »

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

实例

<?php

/**
 * 工厂模式
 * Class Calculator
 *
 */
class Calculator
{
    public static function operation($symbol,array $num=[])
    {
        switch ($symbol){
            case '+':
                return new Add($num[0],$num[1]);
                break;
            case '-':
                return new Sub($num[0],$num[1]);
                break;
            case '*':
                return new Mul($num[0],$num[1]);
                break;
            case '/':
                return new Div($num[0],$num[1]);
                break;
        }
    }
}

class Add
{
    public $num1;
    public $num2;
    public function __construct($num1,$num2)
    {
        $this->num1 = $num1;
        $this->num2 = $num2;
    }
    public function result()
    {
        return $this->num1+$this->num2;
    }
}
class Sub
{
    public $num1;
    public $num2;
    public function __construct($num1,$num2)
    {
        $this->num1 = $num1;
        $this->num2 = $num2;
    }
    public function result()
    {
        return $this->num1-$this->num2;
    }
}
class Mul
{
    public $num1;
    public $num2;
    public function __construct($num1,$num2)
    {
        $this->num1 = $num1;
        $this->num2 = $num2;
    }
    public function result()
    {
        return $this->num1*$this->num2;
    }
}
class Div
{
    public $num1;
    public $num2;
    public function __construct($num1,$num2)
    {
        $this->num1 = $num1;
        $this->num2 = $num2;
    }
    public function result()
    {
        if($this->num2 != 0){
            return $this->num1/$this->num2;
        }else{
            return '除数不得为0';
        }

    }
}

$obj = Calculator::operation('+',[3,9]);
echo $obj->result().'<br>';

$obj = Calculator::operation('-',[55,9]);
echo $obj->result().'<br>';

$obj = Calculator::operation('*',[3,2]);
echo $obj->result().'<br>';

$obj = Calculator::operation('/',[3,3]);
echo $obj->result();

运行实例 »

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

实例

<?php
/**
 * 注册树模式
 * Class Demo1
 */

class Demo1
{
}

class Demo2
{
}

class tree
{
    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]);
    }
}

tree::set('Demo1', new Demo1());
tree::set('Demo2', new Demo2());

var_dump(tree::get('Demo1'));
tree::del('Demo1');
var_dump(tree::get('Demo1'));

运行实例 »

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


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