zoukankan      html  css  js  c++  java
  • 设计模式-PHP实现单件模式的几种方式

    单件模式是我们在开发中经常用到的一种设计模式,利用PHP5面向对象的特性,我们可以很容易的构建单件模式的应用,下面是单件模式在PHP中的几种实现方法:

    class Stat{
        
    static $instance = NULL;
        
        
    static function getInstance(){
            
    if(self::$instance == NULL){
                self
    ::$instance = new Stat();
            }
            
            
    return self::$instance;
        }
        
        
    private function __construct(){
        }
        
        
    private function __clone(){
        }    
        
        
    function sayHi(){
            
    return "The Class is saying hi to u ";
        }
    }


    echo Stat::getInstance()->sayHi();

    这是一种最通常的方式,在一个getInstance方法中返回唯一的类实例。

    对这里例子稍加修改,便可以产生一个通用的方法,只要叫道任何你想用到单件的类里,就可以了。

    class Teacher{
        
    function sayHi(){
            
    return "The teacher smiling and said 'Hello '";
        }
        
        
    static function getInstance(){
            
    static $instance;
            
            
    if(!isset($instance)){
                
    $c = __CLASS__;
                
    $instance = new $c;
            }
            
            
    return $instance;
        }
    }

    echo Teacher::getInstance()->sayHi();

    最后一种是提供一个singleton类,然后通过调用getInstance方法,可以为任何一个类生产出一个实例来。

    class singleton{
        
    function getInstance($class){
            
    static $instances = array();
            
    if(!array_key_exists($class,$instances)){
                
    $instances[$class= &new $class;
            }
            
    $instance = $instances[$class];
            
            
    return $instance;
        }
    }

    class People{
        
    function sayHi(){
            
    return 'Hello i am a people?';
        }
    }

    echo "<br />";
    echo singleton::getInstance('People')->sayHi();

    通过这三种方法,我们可以很容易的应用单件模式,如果能够结合工厂模式,将使我们的编程变得更有条理和效率。

  • 相关阅读:
    服务器端渲染SSR的优缺点?
    Vue轻量级富文本编辑器-Vue-Quill-Editor
    浏览器跨域问题
    CSS中 !important 的使用
    如何使用vue-table-with-tree-grid的树形表格组件
    各类程序员学习路线图
    Vue中 el-table大数据量加载,不分页,节省内存的性能优化
    看完让你彻底理解 WebSocket 原理,附完整的实战代码(包含前端和后端)
    vue中class类名根据绑定的值三元表达式或字符串拼接动态添加类名
    close事件 vue_vue 监听浏览器关闭事件
  • 原文地址:https://www.cnblogs.com/cocowool/p/1415660.html
Copyright © 2011-2022 走看看