设计模式-单例模式

设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。

单例模式

【介绍】

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

单例模式有两种方式:(1)饿汉式(2)懒汉式


【实现】

步骤如下:
(1)构造器私有化。(防止直接new)

(2)类的内部创建对象。

(3)向外暴露一个静态的公共方法


【饿汉式】

饿汉式:类加载的时候就实例化,并且创建单例对象。

(1)构造器私有化;
(2)在类的内部直接创建对象,该对象是static;
(3)提供一个公共的static方法,返回这个对象。

public class Hungry{// 类加载的时候就实例化,并且创建单例对象
	private Hungry(){} //构造器私有化
	
	private static final Hungry hungry=new Hungry();
	
	public static Hungry getInstance(){
		return hungry;
	}
}

【懒汉式】

懒汉式:默认不会实例化,什么时候用什么时候new。

(1)构造器私有化;
(2)定义一个static静态属性对象;
(3)提供一个public的static方法,可以返回一个该类对象;
(4)懒汉式,只有当用户使用getInstance时,才返回对象,后面再次调用时,会返回上次创建的该类对象,从而保证的单例。

public class Lazy{//默认不会实例化,什么时候用什么时候new
	private Lazy(){}
	
	private static Lazy lazy=null;
	
	public static synchronized Lazy getInstance(){
		if(lazy==null){
			lazy=new Lazy();
		}
		return lazy;
	}
}

【饿汉式 VS 懒汉式】

(1)二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载时就创建了对象实例,而懒汉式是在使用时才创建。

(2)饿汉式不存在线程安全问题,懒汉式存在线程安全问题。

(3)饿汉式存在浪费资源的可能(没有使用到这个对象实例),而懒汉式不存在这个问题。

(4)在javaSE标准类中,java.lang.Runtime就是经典的单例模式。


【运用到单例模式的练习】

image
这里唐僧的马儿一直是那个白龙马,不用每次转到一般情况都创建一个新的马。

posted @ 2021-09-12 20:26  Wiiiimp  阅读(43)  评论(0编辑  收藏  举报