单例模式

单例模式

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

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

 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、违反单一职责原则。

posted @ 2020-11-07 14:59  所见即我  阅读(76)  评论(0编辑  收藏  举报