多例設計模式:
特色: 構造方法私有化,類內部提供多個實例化對象,後面經過static方法返回java
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是對一種類型的包裝,本質是一個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);
this
取得枚舉名字: 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這個抽象類code
多例設計是在一個類當中產生的,在類中能夠定義更多的屬性或方法對象
枚舉提供更強大的設計方案 + 屬性 + 方法 + 接口 在枚舉中定義更多的結構繼承
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); } }