单例设计模式
单例模式介绍
-
1. 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中
-
2. 分类(两种方式)
-
-
(2)懒汉式
单例模式的实现方法
-
(1)类的内部创建对象
-
-
(3)向外暴露一个静态的公共方法:用于返回对象(getinstance)
单例模式的经典案例
javaSE 标准类中,java.lang.Runtime就是经典的单例模式。
一、饿汉式
解释:只要类加载,无论是否使用该类的实例对象,都会在类中创建对象实例
形象理解:很饿,饥渴难耐,无论是否使用该对象,都会创建
代码示例
package pattern.sigal;public class main {public static void main(String[] args) {girlfriend instance = girlfriend.getinstance();System.out.println(instance);}
}class girlfriend{private String name;private static girlfriend gf = new girlfriend("女朋友");private girlfriend(String name) {System.out.println("构造器被调用");this.name = name;}public static girlfriend getinstance(){return gf;}@Overridepublic String toString() {return "girlfriend{" +"name='" + name + '\'' +'}';}
}
构造器被调用
girlfriend{name='女朋友'}
二、懒汉式
解释:只有在对象被使用时才会创建
形象理解:很懒,有需求了才做
代码示例
package pattern.lazy;public class main {public static void main(String[] args) {Cat cat = Cat.getInstance();System.out.println(cat);Cat cat1 = Cat.getInstance();System.out.println(cat1);System.out.println(cat == cat1); }
}class Cat {private String name;private static Cat cat; private Cat(String name) {System.out.println("构造器被调用");this.name = name;}public static Cat getInstance() {if (cat == null) {cat = new Cat("小猫");}return cat;}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +'}';}
}
构造器被调用
Cat{name='小猫'}
Cat{name='小猫'}
true
饿汉式和懒汉式对比
-
1. 最主要的区别:创建对象的时机不同
-
2. 关于线程安全问题
-
(1)饿汉式:不存在
-
-
补充说明:后面学习线程后,再完善
-
-
(1)饿汉式:存在浪费资源的可能
-
解释:只要类加载,就会执行创建对象实例,如果对象实例没有被使用,就造成了资源的浪费
-
-
解释:懒汉式模式下,对象在使用时才创建,就不存在这个问题。