一只大脸猫博客主要分享PHP开发技巧、Web前端技术、网站优化、网站排名、修电脑、心灵鸡汤等一些生活中遇到的事、道理和技巧。分享更多知识给身边的朋友。
一只大脸猫博客主要分享PHP开发技巧、Web前端技术、网站优化、网站排名、修电脑、心灵鸡汤等一些生活中遇到的事、道理和技巧。分享更多知识给身边的朋友。

「设计模式」PHP单例模式以及单例模式的使用案例


PHP 设计模式说明

什么是单例模式?

单例模式(Singleton Pattern):一个类只允许创建一个对象(或者实例),而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法,这种设计模式就叫作单例设计模式,简称单例模式;单例模式是一种对象创建型模式。

单例模式是结构最简单的设计模式一,在它的核心结构中只包含一个被称为单例类的特殊类。

单例模式结构中只包含一个单例角色:

Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让客户可以访问它的唯一实例;

为了防止在外部对其实例化,将其构造函数设计为私有;

在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例。

单例模式的三个要点!!!

单例模式有三个要点:

一是某个类只能有一个实例;

二是它必须自行创建这个实例;

三是它必须自行向整个系统提供这个实例

为什么要使用单例?

1、处理资源访问冲突;

例如:往文件中打印日志的功能。

2、表示全局唯一类

从业务概念上,如果有些数据在系统中只应保存一份,那就比较适合设计为单例类。例如:唯一递增 ID 号码生成器。

实现方式

实现php的单例模式需要三个步骤:

* 1、一个静态成员变量,用来保存类;

* 2、为防止对象创建或者克隆,需要吧__construct和__clone声明为私有;

* 3、一个访问这个实例的公共的静态方法,通常为getInstance。

class single

{
    private static  $instance;//定义一个静态成员变量,用来保存类
    private function __construct(){}//为防止对象创建,声明为私有
    private function __clone(){}//为防止对象克隆,声明为私有
    public static function getInstance() {//一个访问这个实例的公共的静态方法

        if (empty(self::$instance)) {
            self::$instance = new single();
        }
        return self::$instance;
    }
}

单例设计模式使用案例:获取ID,一个全局唯一的id号码生成器就出现了;

 class single
{   
    private  $id = 0;
    private static  $instance;//定义一个静态成员变量,用来保存类
    private function __construct(){}//为防止对象创建,声明为私有
    private function __clone(){}//为防止对象克隆,声明为私有
    public static function getInstance() {//一个访问这个实例的公共的静态方法

        if (empty(self::$instance)) {
            self::$instance = new single();
        }
        return self::$instance;
    }
     public function getId() {//获取累加ID
        return $this->id++;
    }
}

总结

实现php的单例模式需要三个步骤

* 一个静态成员变量,用来保存类。

* __construct和__clone声明为私有,防止创建或者克隆。

* 一个静态方法,通常为getInstance,用来访问这个实例。

更多关注PHP设计模式


「设计模式」PHP单例模式以及单例模式的使用案例:https://www.yzdlm.com/Singleton.html

作者:大脸猫 分类: 大脸猫PHP博客 设计模式


上一篇:PHP丨PHP基础知识之流程控制WHILE循环「理论篇」 下一篇:面向对象设计原则

评论


乖,登录后才可以留言!
QQ一键登录

相关文章

0、2020-10-21——构造函数在php中的使用方法
1、2020-10-21——PHP面向对象的魔术方法有哪些?
2、2020-09-27——面向对象设计原则
3、2020-09-25——「设计模式」PHP单例模式以及单例模式的使用案例
4、2020-07-03——PHP开发环境搭建工具有哪些?
5、2020-06-07——PHP丨PHP基础知识之流程控制WHILE循环「理论篇」
6、2020-06-07——PHP丨PHP基础知识之流程控制for循环「理论篇」
7、2020-03-04—— PHP 设计模式说明|从这里开始学习(设计模式)
8、2019-07-20——composer如何安装?
9、2019-07-18——Composer -- PHP依赖管理的新时代
10、2019-07-17——PHP 开发者该知道的 5 个 Composer 小技巧
11、2019-07-16——Composer 是什么?
12、2019-06-12——PHP 7新特性五 Spread operator(数组延展操作符)
13、2019-06-01——为什么大家总喜欢黑PHP?PHP到底做错了什么
14、2019-05-24——PHP 7新特性四 Typed properties (属性类型化)
15、2019-05-24——PHP 7 新特性三 Traits
16、2019-05-23——PHP 7 新特性二 Null coalescing operator(空合并运算符)
17、2019-05-23——PHP 7新特性一 Short closures 短闭包
18、2019-05-22——在线编辑器实现代码高亮展示
19、2019-05-20——PHP是什么?
Top