Java设计模式-类的单例设计模式
最编程
2024-07-07 07:08:56
...
采取一定的方法,保证整个软件系统中,对于某个类只能存在一个对象实例,并且该类只提供一个取得对象实例的方法。Runtime类就是用的是单例模式。
1.1、饿汉式
饿汉式: 类加载的时候,对象就被创建了。就算没有调用实例,实例对象也已经被创建了。可能存在资源浪费问题。
步骤如下
- 构造器私有化(添加private修饰即可):防止直接new
- 类的内部创建对象
- 向外暴露pubic static 类名 getInstance方法,用来获取实例
package com.zhw.static_;
class GirlFriend {
private String name;
// 只会加载一次实例对象
private static GirlFriend gf = new GirlFriend("xx?.x");
public GirlFriend(String name) {
this.name = name;
}
// 向外暴露实例对象
public static GirlFriend getInstance() {
return gf;
}
// 执行当前类实例对象的打印时,调用toString
@Override
public String toString() {
return name;
}
}
public class ChildGame {
public static void main(String[] args) {
System.out.println(GirlFriend.getInstance());
}
}
1.2、懒汉式
懒汉式: 只有调用获取实例时,才会创建对象实例。【当用户调用getInstance实例的时候,才会创建实例,访问其他静态属性,是不会创建实例的】。可能存在多线程安全问题在判断==null的时候。
package com.zhw.static_;
class GirlFriend {
private String name;
// 只会加载一次实例对象
private static GirlFriend gf;
public GirlFriend(String name) {
this.name = name;
}
// 向外暴露实例对象
public static GirlFriend getInstance() {
if(gf == null) {
gf = new GirlFriend("xx?.x");
}
return gf;
}
// 执行当前类实例对象的打印时,调用toString
@Override
public String toString() {
return name;
}
}
public class ChildGame {
public static void main(String[] args) {
System.out.println(GirlFriend.getInstance());
}
}