zoukankan      html  css  js  c++  java
  • 单例模式

    单例模式

    - 能够保证一个类只有一个实例 并提供一个访问该实例的全局节点

    - 一个类只能有一个实例且该实例只能自己创建。

     1 <?php
     2 class Singleton
     3 {
     4     //添加私有静态成员变量用于保存单例实例
     5     private static $instance;
     6 
     7     //申明公有静态方法用于获取单例实例
     8     public static function getInstance()
     9     {
    10         if (empty(self::$instance)) self::$instance = new self();
    11 
    12         return self::$instance;
    13     }
    14 
    15     //私有默认构造方法,保证外界无法直接实例化
    16     private function __construct()
    17     {
    18     }
    19 
    20     //防止用户克隆实例
    21     public function __clone()
    22     {
    23         die('clone is not allow');
    24     }
    25 
    26     public function test()
    27     {
    28         echo 'Singleton test is success';
    29     }
    30 }

    - 使用场景

    1、想控制实例数目,节省系统资源的时候。如数据库连接、类方法封装(方法不使用关键字 static,通过 $instance 来调用不同方法)

    2、需要更加严格地控制全局变量 可以使用单例模式

    - 优点

    1、在内存里只有一个实例,仅在首次请求单例对象时对其进行初始化,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。

    2、避免对资源的多重占用(比如写文件操作)。

    3、获得了一个指向该实例的全局访问节点

    - 缺点

    1、没有接口,无法继承。

    2、该模式在多线程环境下需要进行特殊处理 避免多个线程多次创建单例对象

    3、违反单一职责原则。

  • 相关阅读:
    C#中常见的系统内置委托用法详解(抄录)
    ClassifyHandler 分类处理结构
    AutoFac Ioc依赖注入容器
    深入理解DIP、IoC、DI以及IoC容器
    ASP.NET MVC的请求处理流程
    电商秒杀功能实现
    MVC之Global.asax解析
    MVC基类控制器的会话丢失重新登录权限过滤
    MVC的Action上下文:ActionExecutingContext
    ASP.NET与MVC架构区别总结
  • 原文地址:https://www.cnblogs.com/suojian/p/13941016.html
Copyright © 2011-2022 走看看