zoukankan      html  css  js  c++  java
  • 常用设计模式

    1.单例设计模式

    确保某一个类只有一个实例,而且自行实例化向整个系统提供这个实例

    要素:

      @1.这个类只能有一个实例

      @2.它必须自行创建这个实例

      @3.它必须自行向整个系统提供这个实例

    用途:

    @1.主要用于数据库应用,一个应用中会存在大量的数据库操作,再使用面向对象的方式开发时,如果使用单例模式,则可避免大量的new操作消耗的资源,还可以减少数据据库链接

    这样就不容易出现too many connections情况

    @2.如果系统需要有一个类来全局控制某些配置信息,那么使用单例模式可以很方便的实现,可以参照 zend Framework的FrontController部分

    /**
     * 设计模式之单例模式
     * $_instance必须声明为静态的私有变量
     * 构造函数必须声明为私有,防止外部程序new类从而失去单例模式的意义
     * getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用
     * ::操作符只能访问静态变量和静态函数
     * new对象都会消耗内存
     * 使用场景:最常用的地方是数据库连接。
     * 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
     */
    class man
    {
        //保存例实例在此属性中
        private static $_instance;
    
        //构造函数声明为private,防止直接创建对象
        private function __construct()
        {
            echo '我被实例化了!';
        }
    
        //单例方法
        public static function get_instance()
        {
            //var_dump(isset(self::$_instance));
            
            if(!isset(self::$_instance))
            {
                self::$_instance=new self();
            }
            return self::$_instance;
        }
    
        //阻止用户复制对象实例
        private function __clone()
        {
            trigger_error('Clone is not allow' ,E_USER_ERROR);
        }
    
        function test()
        {
            echo("test");
    
        }
    }
    
    // 这个写法会出错,因为构造方法被声明为private
    //$test = new man;
    
    // 下面将得到Example类的单例对象
    $test = man::get_instance();
    $test = man::get_instance();
    $test->test();
    
    // 复制对象将导致一个E_USER_ERROR.
    //$test_clone = clone $test;
    

      

  • 相关阅读:
    Android 学习笔记5程序开发模式&拨号器&短信发送器小例程
    Android学习笔记6日志输出&单元测试
    utkernel 移植时调试方法
    在eclipse中查看Android SDK源代码
    (转载)怎样改进数据库的查询性能?
    asp.net 编程模型
    数据回传
    在博客园记录我的成长
    LeetCode14.最长公共前缀
    LeetCode206.反转链表
  • 原文地址:https://www.cnblogs.com/jiechn/p/4460716.html
Copyright © 2011-2022 走看看