您的位置:首页 > 编程语言 > Java开发

创建型模式之单例设计模式(java版)

2016-07-27 22:47 281 查看
单例设计模式目得:

主要就是为了使一个类只能存在一个实例化的对象。

单例设计模式特点:

如果想要使这个对象唯一,就不能随便让其他类还建立这个对象。但是还得让其他的类可以使用这个对象(就是只能使用,不能创造),所以其他类要想访问,只能通过专门提供的接口。

单例设计模式java代码思想:

1.构造函数私有化:由于不能被其他类建立对象,所以只能使他们的访问权限设置为private,也就是不能创造对象。

2.在本类中创建一个私有并静态的本类对象:由于这个本类对象不能被外部访问,所以要设置为私有访问权限,由于外部类不能创建对象访问本类中的方法(也就是提供给外部的接口),所以只能通过类名调用,所以对外访问的方法肯定是静态的,所以静态方法访问的全局的对象也得是静态的(解释:如果是非静态的变量,需要通过对象去调用。而静态方法在未创建对象时直接用类就已经调用了,上哪去找非静态的变量呢?)。

3.对外提供一个公有静态的方法用于获取静态的全局对象:就是给外部提供一个可以访问对象的接口,所以是公有的,只能使用类调用,所以是静态的。

对于老鸟,可能上面的话又臭又长吧。

下面直接是代码图

public class SingleInstance {

private static SingleInstance single=new SingleInstance();
private SingleInstance(){}
public static SingleInstance getSingleInstance(){
return single;
}

}


第一张图就是饿汉式,就是先在内存中初始化一个Single对象,可能就是所谓的饿完了,先来个对象吧,哈哈。

public class SingleInstance {

private static SingleInstance single=null;
private SingleInstance(){}
public static SingleInstance getSingleInstance(){
if(single==null)
single=new SingleInstance();
return single;
}

}


第二张图就是懒汉式,我还以为叫饱汉式呢,(开始想的是先不吃,等饿了再吃),实际就是等方法被调用的时候再创建对象。

反正面试的时候问我单例模式:我当时就直接说,一个先new对象,一个是需要的时候在new对象。

细看之下,会发现懒汉式是线程不安全的一种模式,如果两个线程同时去访问,并且一个已经new对象了,另一个虽然没有实例化对象,那么当到if(single==null)的判断,一个线程是没有实例化对象,那么已经new对象的另一个线程,就也会跟着进到判断体中,也会new对象,那么就不能保证是单例了。所以懒汉式是线程不安全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: