zoukankan      html  css  js  c++  java
  • php设计模式 ---单例模式.

    单例模式的特点:
         1、一个类只有一个实例
         2、它必须自行创建这个实例
         3、必须自行向

    单例模式中主要角色
         Singleton 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类方法。负责创建它的唯一的实例。

    单例模式的优点
         1、对唯一实例的受控访问
         2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
         3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
         4、允许可变数目的实例(多例模式)
         5、比类操作更灵活

    PHP单例模式三要素

       1. 需要一个保存类的唯一实例的静态成员变量。
       2. 构造函数和克隆函数必须声明为私有的,防止外部程序创建或复制实例副本。
       3. 必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用。

    代码示例

    <?php
    /**
     * 单例模式 
     * @package design pattern
     */
     
    /**
     * 懒汉式单例类
     */
    class Singleton {
     
        /**
         * 静态成品变量 保存全局实例
         */
        private static  $_instance = NULL;
     
        /**
         * 私有化默认构造方法,保证外界无法直接实例化
         */
        private function __construct() {
        }
     
        /**
         * 静态工厂方法,返还此类的唯一实例
         */
        public static function getInstance() {
            if (is_null(self::$_instance)) {
                self::$_instance = new Singleton();
            }
     
            return self::$_instance;
        }
     
        /**
         * 防止用户克隆实例
         */
        public function __clone(){
            die('Clone is not allowed.' . E_USER_ERROR);
        }
     
        /**
         * 测试用方法
         */
        public function test() {
            echo 'Singleton Test!';
        }
     
    }
     
    /**
     * 客户端
     */
    class Client {
     
         /**
         * Main program.
         */
        public static function main() {
            $instance = Singleton::getInstance();
            $instance->test();
        }
    }
     
    Client::main();
    

    PHP中不支持饿汉式的单例模式
    因为PHP不支持在类定义时给类的成员变量赋予非基本类型的值。如表达式,new操作等等 

    cr:http://www.phppan.com/2010/06/php-design-pattern-6-singleton/

  • 相关阅读:
    Python之利用 gensim的word2vec进行酒店评论+wiki百科语料联合词向量训练
    Python之酒店评论主题提取LDA主题模型
    Python之酒店评论分词、词性标注、TF-IDF、词频统计、词云
    Pycharm使用技巧----Pycharm工程使用anaconda环境
    Python之Pandas 简介与Pandas 读取csv文件及相关操作01
    csv文件用excel打开乱码的解决方案
    apply()和call()的方法
    如何将webstrom本地的代码上传到github上
    通过Ajax方式上传文件,使用FormData进行Ajax请求
    Express bodyParser中间件使用方式
  • 原文地址:https://www.cnblogs.com/nycj/p/14518926.html
Copyright © 2011-2022 走看看