博主信息
博文 56
粉丝 3
评论 1
访问量 60925
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
php设计模式——2018年5月10日
沈斌的博客
原创
989人浏览过

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


单例模式 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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学