1.枚举
多例设计模式特点:构造方法私有化,类内部需要提供若干个实例化对象,后面通过static方法返回。
一个类的实例化对象可数就是一个多例。
范例:基于枚举开发
package www.bit.java.testdemo;
enum Color {
RED,GREEN,BLUE
}
public class TestDemo {
public static void main(String[] args) {
Color color= Color.RED
//或者遍历
Color.value()
System.out.println(color);
}
}
1.2 Enum类
请解释enum与Enum区别:
enum是一个关键字,使用enum定义的枚举类本质上就相对于一个类继承了Enum这个抽象类而已。
(1)枚举类型不能被用户实例化
(2)定义枚举对象(通常名字是大写)
(3)使用枚举对象,通过枚举类.属性
(4)枚举类型是典型的多例设计,每个枚举对象都当且仅当只有一个
(5)列举所有的枚举对象,枚举类.value() 例如:Color.value()
(6)枚举对象的名称,枚举对象.name()
(7)通过枚举类的valueOf()方法获取枚举对象(枚举常量),name必须存在
(8)枚举类和普通类有很多相似的地方,定义成员静态属性和方法
(9)枚举对象的ordinal()开发避免使用,它的值基于枚举对象定义的顺序
(10)枚举类继承自java.lang.Enum,单继承关系,不能再继承其他关系,
enum隐式继承Enum
(11)枚举类的构造方法是私有的
(12)枚举类可以实现接口
(13)switch支持枚举
在Enum类里面有以下方法:
1.构造方法 (ordinal:adj 顺序的,依次的 n 序数)
protected Enum(String name, int ordinal)
2.取得枚举名字:
public final String name()
3.取得枚举序号:
public final int ordinal()
1.3定义结构
虽然枚举等同于多例设计,但是多例设计是在一个类中产生的,所以该类中可以定义更多的属性或方法。所以在枚举设计的时候考虑到这些因素,提出了更为全面的设计方案:可以在枚举中定义属性、方法、实现接口。
范例:枚举实现接口
package www.bit.java.testdemo;
interface IColor {
public String getColor() ;
}
enum Color implements IColor{
// 如果定义有很多内容,枚举对象必须写在第一行
RED(“红色”),GREEN(“绿色”),BLUE(“蓝色”) ;
private String title ;
// 构造方法私有化
private Color(String title) {
this.title = title ;
}
@Override
public String toString() {
return this.title ;
}
@Override
public String getColor() {
return this.title ;
}
}
public class TestDemo {
public static void main(String[] args) {
IColor iColor = Color.BLUE ;
System.out.println(iColor.getColor());
}
}
枚举还可以实现接口,这样枚举中的每一个对象都变成了接口对象。
在枚举操作中还有一个方法可以取得所有的枚举数据:values()返回的是一个枚举的对象数组。
范例:取得所有枚举数据
enum Color {
RED,GREEN,BLUE
}
public class TestDemo {
public static void main(String[] args) {
for (Color temp : Color.values()) {
System.out.println(temp.ordinal()+" = " +temp.name());
}
}
}
1.4枚举应用
例如:定义一个表示性别的枚举类,只能有两个对象。
package www.bit.java.testdemo;
enum Sex {
MALE(“男”),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) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “, sex=” + sex + “]”;
}
}
public class TestDemo {
public static void main(String[] args) {
Person per = new Person(“张三”, 20, Sex.MALE) ;
System.out.println(per);
}
}
另外需要注意的是,枚举本身还支持switch判断。
范例:switch使用枚举
package www.bit.java.testdemo;
enum Sex {
MALE,FEMALE
}
public class TestDemo {
public static void main(String[] args) {
switch(Sex.MALE) {
case MALE :
System.out.println(“男人”);
break ;
case FEMALE :
System.out.println(“女人”);
break ;
}
}
}