Java基础-枚举

多例设计模式:
特点: 构造方法私有化,类内部提供多个实例化对象,后面通过static方法返回

class Color {
    private static final Color RED = new Color("RED");
    private static final Color GREEN = new Color("GREEN");
    private static final Color BLUE = new Color("BLUE");
    
    private String title;
    private Color(String title) {
        this.title = title;
    }

    private static Color getInstance(int ch) {
        switch (ch) {
            case 0 : return RED;
            case 1 : return GREEN;
            case 2 : return BLUE;
            default: return null;
        }
    }
    public String toString() {
        return this.title;
    }

    public class TestDemo {
        public static void main(String[] args) {
            System.out.println(Color.getInstance(0));
        }
    }
}

上面的代码是在JDK1.5 之前的做法,目的在于限制本类实例化对象的产生个数。但是JDK1.5之后用枚举进行代替,可以大大简化

enum Color {
    RED, GREEN, BLUE;
}

public class TestDemo {
    public static void main(String[] args) {
        System.out.println(Color.RED);
    }
}

实际上枚举就是一种高级的多例设计模式。

Enum类

enum是对一种类型的包装,本质是一个class 定义的类继承了java.lang.Enum父类
public abstract class Enum<E extends Enum<E>> extends Object implements Comparable<E>, Serializable

Enum类中的方法
构造方法: protectd Enum(String name, int ordinal);

  • 当定义枚举类中的对象时,系统自动进行了序号的

取得枚举名字: public final String name()
取得枚举序号: public final int ordinal()
取得所有的枚举数据: values() 返回的是枚举的对象数组

// values() 方法的使用
public class TestDemo {
    public static void main(String[] args) {
        for (Color temp : Color.values()) { //values可以看做枚举和多例的区别
            System.out.println(temp.ordinal() + " = " + temp.name()); 
            //返回: 0 = RED 1 = GREEN 2 = BLUE
        }
    }
}

面试题:解释enum 和 Enum的区别
enum 是一个关键字, 使用enum定义的枚举类本质上就相当于一个类继承了Enum这个抽象类

定义枚举的其它结构

多例设计是在一个类当中产生的,在类中可以定义更多的属性或方法

枚举提供更强大的设计方案 + 属性 + 方法 + 接口 在枚举中定义更多的结构

enum Color {
    RED("红色"), GREEN("绿色"), BLUE("蓝色"); // 如果定义有许多内容,枚举对象必须在第一行
    private String title;
    private Color(String title) { // 构造方法一定不能用public, 多例设计的原则
        this.title = title;
    }
    public String toString() {
        return this.title;
    }
}

public class TestDemo {
    public static void main(String[] args) {
        System.out.println(Color.RED);
    }
}

posted @ 2019-01-08 10:14  AugusKong  阅读(144)  评论(0编辑  收藏  举报