解释
单例模式又叫单元素模式、单件模式,目的是确保程序运行过程当中,一个类只有一个实例化的对象,这个对象就是单一的全局访问点
单例模式常用在数据库连接、缓存、线程池中,可以减少占用的资源
PHP实现
<?php
class Test{
private static $obj=NULL;
//一定要将构造方法的访问属性设为private或者protected,
//目的是防止在外部直接通过new关键字实例化对象
private function __construct(){
#......code.......
}
//获取实例化对象
public static function getInstance(){
//判断该类是否已经实例化出一个对象,若已实例化,则直接返回该对象
//如果未实例化,即$obj仍为null,这是要实例化本类的对象,然后返回这个对象
//第一种判断是否已经实例化的方式
// if(is_null(self::$obj)){
// self::$obj=new self();
//}
//第二种判断是否已经实例化的方式
if(!self::$obj instanceof self){
self::$obj=new self();
}
return self::$obj;
}
//测试
public function say(){
echo "yes";
}
}
// $t=new Test();//实例化失败,因为构造方法是private
$t=Test::getInstance();
$t->say();//yes
?>
Java实现
class Person{
// 用一个静态变量来存创建的实例对象
private static Person _instance;
private String name;
// 单例模式,需要将构造函数设为私有
private Person (String name){
this.name = name;
}
// 暴露给外界,用来获取实例化对象的方法
public static Person getInstance(String name){
if (_instance == null) {
_instance = new Person(name);
}
return _instance;
}
public void showInfo(){
System.out.println("hello, this is " + this.name);
}
}
public class Test{
public static void main(String[] args){
Person p = Person.getInstance("God");
p.showInfo(); // Hello, this is God
}
}