2020-10-29 设计模式——单例模式php

单例模式(Singleton Pattern 单件模式或单元素模式)

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

单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。

单例模式实现

单例模式是类的设计,只会最多产生一个对象的设计思想
所以我们首先是先创建一个空类,假如叫Singleton。

1、因为这个类,实例化一次就产生一个新对象。所以我们需要禁止新对象的产生。即“禁止实例化”。
所谓“禁止实例化”,是禁止外部实例化。由于实例化会同时调用构造方法,所以我们进行私有化构造方法,则可以防止外部实例化。

2、因为外部实例化被禁止,则意味着我们根本不能产生对象。所以需要我们则需要在还没有产生对象的时候,就进入到“类内部”。这就意味着只能通过“静态方法”让类直接进入到类内部。所以我们需要在类里面定义一个静态 方法。我们取名叫做getInstance。

3、因为目的是为了得到一个对象,但此时进入类的内部依然还没有对象。所以需要在静态方法内部镜像对象实例化。并把对象返回到外部。

4、因为静态方法重复调用,也会产生新的对象,所以需要对实例化的产生进行控制。解决办法就是引入一个静态属性(静态方法中,不能使用$this)对对象进行存储。当我们已有对象,则直接返回对象。没有则创建。

5、由于克隆对象会产生新的对象,所以我们还需要禁止克隆。最直接的办法就是私有化克隆。

至此,单例模式设计完毕。

总结:

1、单例模式就是设计的类,最多只能有一个对象。

2、单例模式的设计规范是“三私一公”。

  • 私有化构造方法,禁止类在外部无限调用

  • 私有克隆方法,禁止外部无限克隆

  • 私有化静态属性,保存类内部得到的对象

  • 公有化静态方法,运行外部通过调用类内部方法

单例模式功能

1、单例模式的目的是为了保护资源的唯一性
2、单例模式还有其他功能俗气,可以在类中增加其他的类成员。

你可能感兴趣的:(2020-10-29 设计模式——单例模式php)