单例模式作为设计模式中的常见模式,比较重要。个人有感写了一些东西,助于自己理解单例模式。
首先:什么是单例模式?
单例模式视为了避免重复生成同一个实例对象,而产生的一种模式。因为对象在内存中占据空间较大,相比而言,我们更希望对于相同的对象,不必要每次都新建同样的对象。多个变量指向同一个对象。这样可以节省内存开销。
单例模式的核心是什么?
核心就是三私一公;
1、私有化的构造方法
2、私有化的克隆方法
3、私有化的静态变量
4、公共的静态方法
为什么要设置这三私一公呢?
1、私有化的构造方法是为了避免在类外使用 new class 来创建对象实体,我们只允许使用我们设定好的公共方法来建立实例。
2、私有化的克隆方法是为了避免在使用公共方法获取实例后,再通过clone的方法将对象实体克隆出新的对象(这就不再是单一对象了)
3、私有化的静态变量,用于存储类的实例化对象,至于为什么要是私有化静态的,我在例子中会详细介绍
4、公共的静态方法,用于存储实例化的对象,供外界获取
class only_ins { //私有化的静态变量 private static $obj = null; //私有化克隆方法 private function __clone() { } // 私有化构造方法 private function __construct() { } //公共的静态方法 public static function get_obj() { if (self::$obj == null) self::$obj = new self(); return self::$obj; } //$obj作为容器存储实例,为什么要设为静态属性呢?因为外部只能通过静态方法实例化对象; //而存储容器又是在静态方法中被调用的,所以必须是静态的属性 //那为什么要设为私有变量呢? 个人想法 如果是共有的,那么外部就可以进行访问,从而 //可以修改此变量,那么就无法保证你下次获取到的还是此类的对象了, //比如直接调用并胡乱修改$obj的值 // only_ins::$obj = 121 // 那么下次再调用静态公共方法获取到的就不再是类的对象,而是数字121了
以上就是个人的一点关于单例模式的一些见解,如有不足,请见谅