赞
踩
目录
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只存在一个对象实例,并且该类只提供一个取得其对象实例的方法
(1)构造器私有化(防止直接new)
(2)类的内部创建对象
(3)向外暴露一个静态的公共方法
代码实现:
- public class SingleTon01 {
- public static void main(String[] args) {
- System.out.println(GirlFriend.n1);
- }
- }
-
- class GirlFriend {
- private String name;
-
- public static int n1 = 100;
-
- private static GirlFriend gf = new GirlFriend("小红红");//提前创建
-
- private GirlFriend(String name) {
- this.name = name;
- }
-
- public static GirlFriend getInstance() {
- return gf;
- }
-
- @Override
- public String toString() {
- return "GirlFriend{" +
- "name='" + name + '\'' +
- '}';
- }
- }
- public class SingleTon02 {
- public static void main(String[] args) {
-
- Cat instance1 = Cat.getInstance();
- Cat instance2 = Cat.getInstance();
- System.out.println(instance1 == instance2);//true
- }
- }
-
- class Cat {
- private String name;
- private static Cat cat;//这里没有new
- public static int n1 = 100;
-
- private Cat(String name) {
- System.out.println("构造器被调用...");
- this.name = name;
- }
-
- public static Cat getInstance() {
- if (cat == null) {//如果还没有创建cat对象
- cat = new Cat("小可爱");
- }
- return cat;
- }
-
- @Override
- public String toString() {
- return "Cat{" +
- "name='" + name + '\'' +
- '}';
- }
- }
1.二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用才创建
2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题(暂时没有解决线程安全问题)。
3.饿汉式存在资源的可能。因为如果一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式就是使用时才创建,就不存在这个问题。
jdk源码中java.lang.Runtime类使用了单例模式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。