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

    Python

    
    
    class Single2(object):
        """
        同一个对象
        """
        __instance = None
        def __new__(cls, *args, **kwargs):
            if Single2.__instance is None:
                Single2.__instance = super(Single2,cls).__new__(cls,*args,**kwargs)
            return Single2.__instance
    
    
    class Single3(object):
        """
        多个不同的对象,共享相同的属性和行为
        """
        __shared_dict = {}
        def __new__(cls, *args, **kwargs):
            obj = super(Single3,cls).__new__(cls,*args,**kwargs)
            obj.__dict__ = cls.__shared_dict
            return obj
    
    
    
    
    e = Single2()
    f = Single2()
    print(id(e)==id(f))# true
    
    
    a = Single3()
    b = Single3()
    print(id(a)==id(b))#false
    
    
    print a.__dict__ #{}
    b.__dict__['b'] = 'haha'
    
    print a.__dict__ #{"b":"haha"}
    print b.__dict__ #{"b":"haha"}
    print a._Single3__shared_dict #{"b":"haha"}
    
    
    

    java

    
    class Single{
    	private static  Single instance;
    	private Single() {};
    	public static synchronized Single getInstance() {
    		if (instance == null) {
    			instance = new Single();
    		}
    		return instance;
    	}
    }
    
    
    class Single2{
    	private static Single2 instance = new  Single2();
    	private Single2() {};
    	public static  Single2 getInstance() {
    		return instance;
    	}
    }
    
    
    class Single3{
    	/**
    	 * 懒加载,只有调用 getInstance 的时候,才会加载
    	 * @author an
    	 *
    	 */
    	private static class Singletonolder{
    		private static final Single3  INSTATNCE = new Single3() {};
    	}
    	private Single3() {};
    	public static final Single3 getInstace(){
    		return Singletonolder.INSTATNCE;
    	}
    }
    

    scala

    class Single1 private() {}
    
      /**
      *  私有化 主构造器
      */
    
    object Single1{
      val instance = new Single1()
      def getInstance():Single1 = {
        instance
      }
    
    }
    
    object Single{
      /**
      * equals 检查值相等 类似与 java 的 ==
      * eq  检查内容是否相等  类似于 java 的 equals
      * == 当一方为null 时,相当与 eq 否则为 equals
      */
      def main(args:Array[String]): Unit ={
        val a = Single1.getInstance()
        val b = Single1.getInstance()
        println(a equals b)
      }
    }
    
  • 相关阅读:
    [LeetCode] Min Stack
    [LeetCode] Find Minimum in Rotated Sorted Array
    [LeetCode] Maximum Product Subarray
    [Jobdu] 题目1504:把数组排成最小的数
    [Jobdu] 题目1544:数字序列区间最小值
    Python2.3-原理之语句和语法
    Python2.5-原理之模块
    Vim2.1-Vim简明教程【CoolShell】【非原创】
    Python2.6-原理之类和oop(下)
    QT1.1-与Opencv的hello world
  • 原文地址:https://www.cnblogs.com/jijizhazha/p/7828302.html
Copyright © 2011-2022 走看看