金言:少用则用之!
枚举:
【多例设计】
package cn.mldn.utli; class Color { private String title ; //多例设计模式 private static final Color RED = new Color("红色"); private static final Color GRE = new Color("绿色"); private static final Color BLUE = new Color("蓝色"); private Color(String title) { this.title = title ; } public static Color getInstance(int ch) { switch(ch) { case 1 : return RED ; case 2 : return GRE ; case 3 : return BLUE ; default : return null ; } } public String toString() { return this.title ; } } public class TestDemo { public static void main(String[] args) { Color red = Color.getInstance(1); System.out.println(red.toString()); } }
枚举严格来讲所有语言都支持!在枚举产生之前,都是采用多例设计模式实现。
枚举概念产生后,出现了新的 enum 关键字:
定义枚举:
package cn.mldn.utli; enum Color { //定义枚举类 RED,GRE,BLUE; // 表示此处为实例化对象 } public class TestDemo { public static void main(String[] args) { Color red = Color.RED; System.out.println(red); } }
定义枚举之后,和先前的多例设计code相比较,枚举可以完全简化的替代多例设计模式
枚举关键字 enum定义的枚举类实际上就是继承了 Enum 类的子类:
Enum是一个抽象类;Enum类中定义了两个方法:
|-- 取得枚举的索引: public final int ordinal()
|-- 取得枚举的名字: public final String name()
|-- 枚举类之中还有一个 values()方法,它将对象以对象数组的形式返回。
___________________________________________
定义其他结构:
枚举之中定义的构造法方法,不可以使用public声明,必须构造私有化;
枚举对象必须放在首行,其后才会定义属性、构造、方法;
enum Color { RED("红色"),BLU("绿色"),GREEN("黄色"); //枚举对象定义在枚举类中的首行 private String title ; // 枚举类中的属性 private Color(String title) { this.title = title ; } public String toString() { return this.title; } } public class TestDemo { public static void main(String [] args) { for ( Color c : Color.values() ) { System.out.println(c.toString()) ; } } }
枚举实现接口:
interface Message{ // 定义接口类 public String getTitle() ; } enum Color implements Message { // Color枚举类实现接口 RED("红色"),BLU("绿色"),GREEN("黄色"); //枚举对象定义在枚举类中的首行 private String title ; // 枚举类中的属性 private Color(String title) { this.title = title ; } public String toString() { return this.title; } public String getTitle() { // 覆写接口类方法 return this.title; } } public class TestDemo { public static void main(String [] args) { Message msg = Color.RED ; System.out.println(msg.getTitle()) ; } }
——————————
枚举的应用:
枚举中支持swicth语句函数 >>>>
enum Color { RED , GREEN , BLUE ; } public class TestDemo { public static void main(String [] args) { Color c = Color.RED; switch(c) { case RED : System.out.println("RED") ; break ; case GREEN : System.out.println("GREEN") ; break ; case BLUE : System.out.println("BLUE") ; break ; } } }
#
enum Sex { MALE("男") , FEMALE("女") ; private String title ; private Sex (String title ) { this.title = title ; } public String toString() { return this.title ; } } class Person { private String name ; private int age ; private Sex sex ; public Person(String name , int age , Sex sex) { this.name = name ; this.age = age ; this.sex = sex ; } public String toString() { return this.name + this.age + this.sex ; } } public class TestDemo { public static void main(String [] args) { System.out.println(new Person("于哥" , 24 , Sex.MALE)); } }
————————
总结:
枚举属于高级的多例设计模式
枚举的使用根据个人是否习惯使用,不习惯使用的可以依旧使用多例设计模式