zoukankan      html  css  js  c++  java
  • 单例模式

    解释

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

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

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

      

  • 相关阅读:
    pandas函数
    实战应用--基于物品的协同过滤算法itemCF
    Hadoop--mapreduce知识点总结
    HDFS知识点总结
    学习随笔 --python连接oracle数据库
    学习随笔 --python实现熵权法
    学习随笔 --SparkStreaming WordCount Python实现
    学习随笔 --SparkStreaming WordCount Java实现
    学习随笔--JavaSparkJDBC操作Oracle
    Anaconda和canda简介及区别
  • 原文地址:https://www.cnblogs.com/-beyond/p/7668513.html
Copyright © 2011-2022 走看看