枚举实现单例
2013-11-02 12:14
357 查看
不看不知道,java的枚举是很强大的,可以先搜索一下枚举的使用方法。
下面是使用枚举实现单例模式:
1.
2.
3.
使用enum关键字来实现单例模式的好处是这样非常简洁,并且无偿地提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候。
下面是使用枚举实现单例模式:
1.
public enum Singleton { INSTANCE { public void someMethod() { // . . . } }; protected abstract void someMethod(); }
2.
public enum Elvis { INSTANCE("wangfabo", 1); private final int id; private final String name; Elvis(String n, int i) { id=i; name=n; } public void leaveTheBuilding() { System.out.println("name:"+name+" id:"+id);; } public Elvis getInstance(){ return INSTANCE; } }
3.
enum Singleton { RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255); // 构造枚举值 Singleton(int rv, int gv, int bv) { this.redValue = rv; this.greenValue = gv; this.blueValue = bv; } // 自定义数据域,private为了封装。 private int redValue; private int greenValue; private int blueValue; public int getRedValue() { return redValue; } public void setRedValue(int redValue) { this.redValue = redValue; } public int getGreenValue() { return greenValue; } public void setGreenValue(int greenValue) { this.greenValue = greenValue; } public int getBlueValue() { return blueValue; } public void setBlueValue(int blueValue) { this.blueValue = blueValue; } } public class Demo { public static void main(String[] args) { System.out.println(Singleton.RED.getRedValue()); } }
使用enum关键字来实现单例模式的好处是这样非常简洁,并且无偿地提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候。