单例设计模式
-
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提提供一个取得其对象实例的方法
-
单例模式有两种方式: 饿汉式 懒汉式
饿汉式
-
构造器私有化 (防止直接 new 一个新对象)
-
类的内部创建对象
-
向外提供一个静态的公共方法
public class ?{ public static void mian(String[]args){ // 通过方法可以获取对象 girlfriend Instance=girlfriend.getInstance(); System.out.println(Instance); System.out.println(girlfriend.i); // 调用了静态i ,创建了对象,但可能没有使用,造成资源的浪费 即 饿汉式模式 } } class girlfriend{ private String name; private static int i=100; // 为了能够在静态方法中,调用,返回gf对象,需要将其修饰为静态对象 private static girlfriend gf=new girl friend("某某某"); // 类中创建对象 private girlfrind(String name){ // 构造器私有 this.name=name; } public static girlfriend getInstance(){ // 向外的静态公共方法 return gf; } }
懒汉式
懒汉式: 只有当用户使用getInstance时,才返回cat对象,然后再次调用时,会返回上次创建的cat对象
从而保证了单例
main {
System.out.println(Cat.n1); // 不使用就不创建对象
Cat instance=Cat.geiInstance(); // 使用就创建对象 且再次调用还是上次创建的cat对象
System.out.println(instance);
}
class Cat{
private String name;
public static int n1=100;
private static Cat cat; // 默认 为null
private Cat(String name){
this.name=name;
}
public static Cat getInstance(){
if(cat==null){
cat=new Cat("英短蓝猫");
}
return cat;
}
}
饿汉式和懒汉式的区别
-
二者最主要的区别在于 创建对象的时机不同: 饿汉式 是在类加载就创建了对象实例,而懒汉式是在是使用时创建
-
饿汉式 不存在线程安全问题,懒汉式 存在线程安全问题。
-
饿汉式 存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了。
-
懒汉式是使用时才创建,就不存在这个问题。
-
在javaSE标准类中,java.long.Runtime 就是经典的单例模式