单例模式需要满足三个特征。
1, 私有的静态属性。用于保存对象的实例
2,私有的构造方法。防止外部直接实例对象
3,public属性的静态方法。是外部唯一初始化该类的方法
4,java要求构造方法返回值必须是void
php 与 java 的单例模式对比
java 单例模式
public class lesson
{
public static void main(String[] args)
{
Single demoA = Single.initlized("Hello World"); // 输出hello word
System.out.println(demoA.nums); // 因为实例 自己加1.输出1
Single demoB = Single.initlized("Hello China"); // 没有输出
System.out.println(demoB.nums); // 仍然输出1,因为没有被实例
}
}
class Single
{
private static Single INSTANCE= null ;
public int nums = 0 ; // 实例次数
private Single(String param )
{
// 实例的时候输出参数
System.out.println(param);
// 实例一次的时候,类属性自己加1
nums ++ ;
}
public static Single initlized(String params)
{
if ( INSTANCE == null)
{
INSTANCE = new Single( params);
}
return INSTANCE ;
}
}
php 单例模式
<?php
class Single
{
private static $INSTANCE ;
public static $nums = 0 ;
private function __construct($param1, $param2)
{
self::$nums ++ ; // 类属性,实例一次自己加一次
}
public static function initlized($arg1, $arg2)
{
if( ! self::$INSTANCE instanceof Single)
{
self::$INSTANCE = new Single($arg1, $arg2);
}
return self::$INSTANCE ;
}
}
$demo = Single::initlized("hello", "word");
echo Single::$nums ; // 1
$demo2 = Single::initlized("hello", "word");
echo Single::$nums ; // 1