解释
单例模式又叫单元素模式、单件模式,目的是确保程序运行过程当中,一个类只有一个实例化的对象,这个对象就是单一的全局访问点
单例模式常用在数据库连接、缓存、线程池中,可以减少占用的资源
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 } }