java enum简记
1 enum的责任链
利用enum可以为枚举实例添加方法的特性,可以构造简单的责任链
package enumeration; public class StringHandler { enum handler { Sensitive { @Override String hand(String msg) { return msg.replace("敏感", "*"); } }, HTML { @Override String hand(String msg) { return msg.replace("<", "[").replace(">", "]"); } }; //枚举实例须实现此方法 abstract String hand(String msg); } //遍历枚举实例处理字符串 public static String hand(String msg) { for (handler h : handler.values()) { msg = h.hand(msg); } return msg; } public static void main(String[] args) { String msg = "敏感字符,<html>"; System.out.println(StringHandler.hand(msg)); } }
这种责任链简单而优雅,但扩展性,灵活性不够
2 状态机
人在高兴,悲伤状态下的笑和哭具有不同的意义
package enumeration; public class Person { //自己有一个状态 private State s; public Person(State s){this.s = s;} //调用相应状态下的方法 public void smile(){ s.smile(); }; public void cry(){ s.cry(); }; } //状态 enum State { //高兴状态下的方法实现 Happy { @Override public void smile() { System.out.println("Happy Smile"); } @Override public void cry() { System.out.println("Happy cry"); } }, //悲伤状态下的方法实现 Sad { @Override public void smile() { System.out.println("Sad Smile"); } @Override public void cry() { System.out.println("Happy cry"); } }; //需要实现的方法 public abstract void smile(); public abstract void cry(); }
客服端
package enumeration; public class Client { public static void main(String[] args) { Person p = new Person(State.Happy); p.smile(); p = new Person(State.Sad); p.smile(); } }
结果:
Happy Smile
Sad Smile
这种简单的状态机展示了java enum的优雅,简单与清晰.