设计模式-单例模式
设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
单例模式
【介绍】
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
单例模式有两种方式:(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就是经典的单例模式。
【运用到单例模式的练习】
这里唐僧的马儿一直是那个白龙马,不用每次转到一般情况都创建一个新的马。