• 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的优雅,简单与清晰.

     

  • 相关阅读:
    后缀树到后缀自动机
    bzoj 4199 品酒大会
    BZOJ 4310 跳蚤
    BZOJ 4545 DQS的Trie
    BZOJ 3238 差异
    BZOJ 3277 串
    BZOJ 3926 诸神眷顾的幻想乡
    线程与进程
    SparkSql自定义数据源之读取的实现
    spark提交至yarn的的动态资源分配
  • 原文地址:https://www.cnblogs.com/79home/p/2509254.html
Copyright © 2020-2023  润新知