`

java单例设计模式

阅读更多

一、单例模式的主要特点:

   1、只能有一个实例。

   2、在单例类中创建自己的实例。

   3、创建的实例通过一个公有的方法去让其它类去使用。

二、实现上面三个的方式是:

   1、将构造方法私有化。

   2、在类中创建一个本类对象。

   3、提供一个方法可以获取该对象。

三、单例模式分为两种:1、饿汉式。2、懒汉式。

四、具体的实现方法如下代码:

   1、饿汉式:这种也是开发中常用的。它不涉及线程安全问题

package cn;

public class Persion {
	private String name;
	
	public void setName(String name){
		this.name = name;
	}
	
	public String getName(){
		return name;
	}
	
	private Persion(){//提供一个私有的构造方法
		
	}
	
	private static Persion p = new Persion();//创建一个私有的对象
	
	public static Persion getInstance(){//提供一个外部访问的对象的方法
		return p;
	}
}

调用代码:

package cn;

public class Demo1 {
	public static void main(String[] args) {
		Persion p = Persion.getInstance();
		Persion p1 = Persion.getInstance();
		System.out.println(p==p1);
	}
}

 执行结果:

true

    2、懒汉式:这种在开发中不常用,因为它涉及线程不安全的情况,但是可以用过线程同步解决,如果这样比较繁琐,还不如用饿汉式比较方便。

package cn;

public class Persion {
	private String name;
	
	public void setName(String name){
		this.name = name;
	}
	
	public String getName(){
		return name;
	}
	
	private Persion(){//提供一个私有的构造方法
		
	}
	
	private static Persion p = null;//创建一个私有的对象的引用
	
	public static Persion getInstance(){//提供一个外部访问的对象的方法
		if(p==null){
		p = new Persion();//判断是否为空,如果为空就创建对象,就在这里有线程安全问题,如果多两个人同时访问的情况下,会有创建多个对象的情况
		}
		return p;
	}
}

 调用上面的代码和结果和饿汉式的一样。

结果懒汉式的方式如下:

package cn;

public class Persion {
	private String name;
	
	public void setName(String name){
		this.name = name;
	}
	
	public String getName(){
		return name;
	}
	
	private Persion(){//提供一个私有的构造方法
		
	}
	
	private static Persion p = null;//创建一个私有的对象的引用
	
	//public static synchronized Persion getInstance(){//如果使用这种,这种的相率很低,不宜使用。
	public static Persion getInstance(){//提供一个外部访问的对象的方法
		if(p==null){
			synchronized(Persion.class){
				if(p==null){//使用双重判断
					p = new Persion();//判断是否为空,如果为空就创建对象,就在这里有线程安全问题,如果多两个人同时访问的情况下,会有创建多个对象的情况
				}
			}
		}
		return p;
	}
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics