一、定义:采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个获得该对象的静态方法。
二、分类:
(1)饿汉式:在类加载时创建单一对象。缺点:有可能造成资源浪费。如Runtime类
(2)懒汉式:调用获得对象的静态方法时创建单一对象,且再次调用时,返回的仍然是上一个对象。缺点:会存在线程安全问题。
三、步骤:构造器私有化,防止直接new;类的内部创建一个对象;向外部暴露一个获取单例对象的静态方法。
例如:
饿汉式:
package singlePattern;
public class Ehanshi {
public static void main(String[] args){
System.out.println(Person.getInstance().getName());
}
}
class Person{
private String name;
private static Person p = new Person("xiaoming");//不管是否用到,类加载时就已经创建了。
private Person(String name){//私有构造方法
this.name = name;
}
public static Person getInstance(){//公开的静态获取实例对象的方法
return p;
}
public String getName() {
return name;
}
}
懒汉式:
package singlePattern;
public class Lanhanshi {
public static void main(String[] args){
System.out.println(Stu.getInstance().getName());
}
}
class Stu{
private String name;
private static Stu stu;
private Stu(String name){
this.name = name;
}
public static Stu getInstance(){
if(stu==null){
stu = new Stu("abc");
}
return stu;
}
public String getName() {
return name;
}
}