Java学习路线-9:多例设计与枚举类

mac2024-12-05  24

第25 章 : 单例设计模式

110 单例设计

单例设计模式:只允许提供一个实例对象 - 饿汉式:系统加载就实例化 - 懒汉式:第一次使用的时候实例化 多例设计模式

单例模式特点: 构造方法私有化,内部提供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 ; } }

111 多例设计

class Color{ private String title; private static final Color RED = new Color("红色"); private static final Color GREEN = new Color("绿色"); private static final Color BLUE = new Color("蓝色"); private Color(String title){ this.title = title ; }; public static Color getInstance(String color){ switch(color){ case "red" : return RED; case "green" : return GREEN; case "blue" : return BLUE; default: return null; } } @Override public String toString(){ return this.title; } } class Demo{ public static void main(String[] args) { Color red = Color.getInstance("red") ; System.out.println(red); } }

单例和多例都会提供一个静态获取实例化的方法

第26 章 : 枚举

112 定义枚举类

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"); } // 红色 } }

113 Enum类

枚举本质是一个类

枚举中每一个对象序号都是根据枚举对象的定义顺序来决定的

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定义的类默认继承此类

114 定义枚举结构

枚举类本身属于多例设计模式

在枚举类中定义其他结构

// 枚举类 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()); // 红色 } }

枚举类不建议写太多内容

115 枚举应用案例

enum Sex{ MAN("男"), FEMALE("女") ; private String title; private Sex(String title){ this.title = title ; } @Override 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 ; } @Override public String toString(){ return "Person(" + this.name + " " + this.age + " " + this.sex + ")"; } } class Demo{ public static void main(String[] args) { Person person = new Person("张三", 23, Sex.MAN); System.out.println(person); // Person(张三 23 男) } }
最新回复(0)