博主信息
forever浅笑
博文
22
粉丝
1
评论
1
访问量
13004
积分:0
P豆:214

php常用设计模式(单例,工厂,注册树模式)

2018年05月16日 10:58:15阅读数:552博客 / forever浅笑/ php

单例模式

实例

<?php

/医院
 * 单例模式
 */
class Single
{
    private static $instance = null;

    // 不允许实例化
    private function __construct() { }

    // 不允许克隆
    private function __clone() { }

    // 获取对象
    public static function getInstance()
    {
        if (self::$instance == null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    // 从1加到100
    public function total() {
        $s = 0;
        for ($i = 1; $i <= 100; $i++) {
            $s = $s + $i;
        }
        echo $s;
    }
}

$obj1 = Single::getInstance();
var_dump($obj1);  // object(Single)#1 (0) { }
$obj2 = Single::getInstance();
var_dump($obj2); // object(Single)#1 (0) { }
echo '<hr>';
$obj1->total();

// 单例模式总结
// 1. 创建一个null的静态实例
// 2. 不允许实例化,不允许克隆
// 3. 创建一个静态方法判断并获取返回对象

运行实例 »

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


简单工厂模式 


实例

<?php

/医院
 *  简单工厂模式
 */
class ProductFactory
{
    public static function create($type)
    {
        switch ($type) {
            case 'A':
                return new ProductA();
                break;
            case 'B':
                return new ProductB();
                break;
        }
    }
}

class ProductA {
    public function __construct()
    {
        echo 'this is productA';
    }
}

class ProductB {
    public function __construct()
    {
        echo 'this is productB';
    }
}

ProductFactory::create('A');  // this is productA
echo '<hr>';
ProductFactory::create('B'); // this is productB

// 总结:
    //工厂模式与单例模式只产生单一实例不同,工厂模式用于创建多种类型的多个实例对象

运行实例 »

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

注册树模式 / 对象池模式


实例

<?php

/医院
 *  注册树模式 / 对象池模式
 */
class Demo1
{
    public function show()
    {
        echo 'this is demo1';
    }
}

class Demo2
{
    public function show()
    {
        echo 'this is demo2';
    }
}

class Demo3
{
    public function show()
    {
        echo 'this is demo3';
    }
}

class Tree
{
    private static $obj = [];

    // 将对象挂载到注册树上
    public static function set($key, $val)
    {
        self::$obj[$key] = $val;
    }

    // 将对象从注册树上取出来
    public static function get($key)
    {
        return self::$obj[$key];
    }

    // 将对象从注册树上删除
    public static function del($index)
    {
        unset(self::$obj[$index]);
    }
}

Tree::set('demo1',new Demo1());
Tree::set('demo2',new Demo2());
Tree::set('demo3',new Demo3());
echo '<hr>';
$obj1 = Tree::get('demo1');
$obj1->show(); // this is demo1
echo '<hr>';
$obj2 = Tree::get('demo2');
$obj2->show(); // this is demo2
echo '<hr>';
$obj3 = Tree::get('demo3');
$obj3->show(); // this is demo3

// 总结:  注册树模式就是直接用数组来存储对象

运行实例 »

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


批改状态:合格

老师批语:

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 今天和大家介绍下一种结构型——,别名,它是来保存程序中经使的对象的实通过将对象实到一棵全局的对象上,需要的时候从对象上采摘。
    laravel到的、适配器、策略、数据对象映射、观察者、原型、装饰器、迭代器、代理等。
    php方法属于创建型,是之一,并且还分为简方法、静态以及抽象,而方法就是为了解决简扩展性的问题。
    Java的五种:1、;2、;3、代理;4、观察者;5、适配器
    java:1、;2、;3、建造(Builder);4、观察者;5、适配器(Adapter);6、代理;7、装饰
    php、建造者、原型、适配器、组合、外观、代理等等。是一套被反复使、多数人知晓的、经过分类编目的、代码经验的总结。
    方法是一种的类创建型,此的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖入以达到解耦、复和方便后期维护拓展的目的。
    第一期文章:ThinkPHP自动加载Loader源码分析第二期文章:ThinkPHP配置文件源码分析一、在学习容器以及门面之前需要必须了解的俩个。先对...