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)
  }
}
原文地址:https://www.cnblogs.com/jijizhazha/p/7828302.html