实现单例模式
最佳的单例实现模式就是枚举模式。利用枚举的特性,让JVM来帮我们保证线程安全和单一实例的问题。除此之外,它更简洁,自动支持序列化机制,绝对防止多次实例化。
不仅能避免多线程同步问题,而且还自动支持序列化机制,防止反序列化重新创建新的对象,绝对防止多次实例化。
public enum Singleton {
INSTANCE;
private Demo demo = null;
private Singleton() {
this.demo = new Demo();
}
public Demo getDemo(){
return demo;
}
}
测试 结果为 true
public class Test1 {
public static void main(String[] args) {
Demo demo = Singleton.INSTANCE.getDemo();
Demo demo1 = Singleton.INSTANCE.getDemo();
System.out.println(demo == demo1);
}
}
有些字典好几个属性,就可以用这种方式来存储
用法:
/**
* @author liguanhua
* @Date: 2019/12/25 10:25
* @Description:
*/
public enum Num {
one(1,"一"),two(2,"二"),three(3,"三"),four(4,"四"),five(5,"五"),six(6,"六"),seiven(7,"七");
// 成员变量
private int number;
private String chinese;
// 必须要构造方法
Num(int number, String chinese) {
this.number=number;
this.chinese=chinese;
System.out.println("--------------");
}
// 普通方法 根据某一个number 获取 chinese
public static String getChinese(int index) {
for (Num n : Num.values()) {
if (n.getNumber() == index) {
return n.getChinese();
}
}
return null;
}
// 普通方法 根据某一个chinese 获取 number
public static int getNumber(String index) {
for (Num n : Num.values()) {
if (n.getChinese() == index) {
return n.getNumber();
}
}
return 0;
}
// 必须要 get set
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getChinese() {
return chinese;
}
public void setChinese(String chinese) {
this.chinese = chinese;
}
@Override
public String toString() {
return "Num{" +
"number=" + number +
", chinese='" + chinese + '\'' +
'}';
}
}
测试
public class Test1 {
public static void main(String[] args) {
System.out.println(Num.six.getChinese());
System.out.println(Num.five.getNumber());
Num[] n = Num.values();
for (Num u: n) {
System.out.println(u.toString());
}
}
}
结果