单例设计模式:只允许提供一个实例对象 - 饿汉式:系统加载就实例化 - 懒汉式:第一次使用的时候实例化 多例设计模式
单例模式特点: 构造方法私有化,内部提供static方法获取实例化对象
饿汉式单例模式
class Singleton{ private static Singleton singleton = new Singleton(); // 构造函数私有化 private Singleton(){}; public static Singleton getInstance(){ return singleton ; } } class Demo{ public static void main(String[] args) { Singleton singleton = Singleton.getInstance(); } }懒汉式单例模式
class Singleton{ private static Singleton singleton ; // 构造函数私有化 private Singleton(){}; public static Singleton getInstance(){ // 第一次使用实例化 if (singleton == null){ singleton = new Singleton(); } return singleton ; } }单例和多例都会提供一个静态获取实例化的方法
JDK >= 1.5 枚举主要用于定义有限个数对象的一种结构(多例设计)
枚举可以在程序编译时判断实例化对象是否存在
enum Color{ RED, GREEN, BLUE } class Demo{ public static void main(String[] args) { for(Color color : Color.values()){ System.out.println(color); } // RED GREEN BLUE } }switch中对枚举类判断
enum Color{ RED, GREEN, BLUE } class Demo{ public static void main(String[] args) { Color color = Color.RED ; switch(color){ case RED : System.out.println("红色"); break; case GREEN : System.out.println("绿色"); break; case BLUE : System.out.println("蓝色"); break; default : System.out.println("default"); } // 红色 } }枚举本质是一个类
枚举中每一个对象序号都是根据枚举对象的定义顺序来决定的
enum Color{ RED, GREEN, BLUE } class Demo{ public static void main(String[] args) { for(Color color : Color.values()){ System.out.println(color.ordinal() + " - " + color.name()); } /** 0 - RED 1 - GREEN 2 - BLUE */ } }enum和Enum区别 enum 是JDK 1.5之后提供的关键字,定义枚举类 Enum 是一个抽象类,关键字enum定义的类默认继承此类
枚举类本身属于多例设计模式
在枚举类中定义其他结构
// 枚举类 enum Color{ // 枚举对象要写在首行 RED("红色"), GREEN("绿色"), BLUE("蓝色") ; // 定义属性 private String title ; private Color(String title){ this.title = title ; } @Override public String toString(){ return this.title ; } } class Demo{ public static void main(String[] args) { for(Color color : Color.values()){ System.out.println(color.ordinal() + " - " + color.name() + " - " + color); } /** 0 - RED - 红色 1 - GREEN - 绿色 2 - BLUE - 蓝色 */ } }枚举类中可以实现接口继承
interface Imessage{ public String getMessage(); } enum Color implements Imessage{ RED("红色"), GREEN("绿色"), BLUE("蓝色") ; private String title ; private Color(String title){ this.title = title ; } @Override public String toString(){ return this.title ; } public String getMessage(){ return this.title ; } } class Demo{ public static void main(String[] args) { Imessage message = Color.RED ; System.out.println(message.getMessage()); // 红色 } }枚举类可以直接定义抽象方法, 并且要求每一个枚举对象都要独立覆写此抽象方法
enum Color{ RED("红色"){ public String getMessage(){ return this.toString(); } }, GREEN("绿色"){ public String getMessage(){ return this.toString(); } }, BLUE("蓝色"){ public String getMessage(){ return this.toString(); } } ; private String title ; private Color(String title){ this.title = title ; } @Override public String toString(){ return this.title ; } public abstract String getMessage() ; } class Demo{ public static void main(String[] args) { System.out.println(Color.RED.getMessage()); // 红色 } }枚举类不建议写太多内容