单例模式7种实现

网友投稿 565 2022-05-29

单例模式

1 、介绍:

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一。

2 、应用场景:

3、七种实现方法

1、

package Singleton;

public class SingletonOne {

private SingletonOne(){}

private static class LazyHolder{

private static final SingletonOne INSATNCE=new SingletonOne();

}

public static SingletonOne getInstance(){

return LazyHolder.INSATNCE;

}

}

2、

package Singleton;

public class SingletonTwo {

private SingletonTwo(){};

private static final SingletonTwo INSTANCE=new SingletonTwo();

public static SingletonTwo getInstance(){

return INSTANCE;

}

}

3、

package Singleton;

public class SingletonThree {

private static final SingletonThree instance ;

static{

try{

instance=new SingletonThree();

}catch(Exception e){

throw new RuntimeException("an error occurred!");

}

}

public static SingletonThree getInsance(){

单例模式7种实现

return instance;

}

private SingletonThree(){}

}

4、

package Singleton;

public enum SingletonFour {

INSTANCE;

public void execute(String arg){

}

}

5、

package Singleton;

public class SingletonFive {

private static Volatile SingletonFive instance;

private SingletonFive(){}

public static SingletonFive getInstance(){

if(instance==null){

synchronized (SingletonFive.class) {

if(instance==null){

instance=new SingletonFive();

}

}

}

return instance;

}

}

6、

使用apache commons lang: LazyInitializer

public class SingletonSix extends LazyInitializer {

@Override

protected ComplexObject initialize() {

return new ComplexObject();

}

}

// Create an instance of the lazy initializer

SingletonSix initializer = new SingletonSix();

...

// When the object is actually needed:

ComplexObject cobj = initializer.get();

7、

使用guava:

private static final Supplier tokenSup = Suppliers.memoize(new Supplier() {

@Override

public String get() {

//do some init

String result = xxx;

return result;

}

});

数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:十九、前端必学Bootstrap美化(下篇)
下一篇:专访华为云WeLink服务产品部总裁王俊:打造数字航母,携手伙伴加速企业数字化转型
相关文章