单例模式

解释

  单例模式又叫单元素模式、单件模式,目的是确保程序运行过程当中,一个类只有一个实例化的对象,这个对象就是单一的全局访问点

  单例模式常用在数据库连接、缓存、线程池中,可以减少占用的资源

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
    }
}
  

  

原文地址:https://www.cnblogs.com/-beyond/p/7668513.html