Java设计模式

1、单例模式:某个类只能有一个实例,这个实例必须自行创建,必须提供对外提供唯一调用它的方法

        单例模式的作用应该是和同步锁一样,当我对这个类进行逻辑操作的时候,有且只有一个实例可以进行,而不是在同一时刻出现大量操作它的步骤

        ①:懒汉式,字面理解  懒--说明除非当前时刻必须要做的事情,是不会预先去做什么准备,那么放在单例模式中,则代表在类加载的时刻,我是不会去实例化当前类的对象的,只有调用了实例化的方法后才去做这件事情,见如下代码:

public class SingleTonClass{

private static SingleTonClass singleTonClass = null;

//私有化构造参数

private SingleTonClass(){}

//对外提供一个实例化当前单例的方法

public static synchronize SingleTonClass getInstance(){

if(singleTonClass == null){

singleTonClass = new SingleTonClass();

}

return singleTonClass;

}

}

对static的一些解释,静态static这个关键字不可以修饰顶级类(顶级类就是一个.Java文件最外层的类名,被称为顶级类),只有内部类是可以用static来修饰

②:饿汉式,相对于懒汉式,它会去预加载,也就是说在类加载的时候,它就会创建单例模式的实例

public class SingleTon{

//私有化构造参数

private SingleTon(){}

private SingleTon singleTon = new SingleTon();

//对外提供调用单例模式的方法

public Static SingleTon genInstance(){

return singleTon;

}

}

③第三种方式,双重锁

//这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。

//这种模式中双重判断加同步的方式,比第一个例子中的效率大大提升,因为如果单层if判断,在服务器允许的情况下,

//假设有一百个线程,耗费的时间为100*(同步判断时间+if判断时间),而如果双重if判断,100的线程可以同时if判断,理论消耗的时间只有一个if判断的时间。

//所以如果面对高并发的情况,而且采用的是懒汉模式,最好的选择就是双重判断加同步的方式。

public class SingleTon{

private static SingleTon singleTon = null;

//私有化构造方法

private SingleTon(){}

public static SingleTon genInstance(){

if(singleTon == null){

synchronize(SingleTon.class){

if(singleTon==null){

singleTon = newSingleTon();

}

}

}

return SingleTon;

}

}

你可能感兴趣的:(Java设计模式)