Java——枚举基础应用总结(多例设计模式、Enum类、枚举的实际应用)

目录

1、多例设计模式与枚举

2、java.lang.Enum类

3、枚举结构定义

4、枚举的实际应用

5、总结


1、多例设计模式与枚举

多例设计模式一定是构造方法私有化,而后在内部类种产生若干个实例化对象。

【举例】:定义颜色基色的多例模式

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Color c = Color.getInstance(1);
        System.out.println(c.toString());
    }
}

class Color{
    private static final Color RED = new Color("红色");
    private static final Color GREEN = new Color("绿色");
    private static final Color BLUE = new Color("蓝色");

    private String title;
    public Color(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Color{" +
                "title='" + title + '\'' +
                '}';
    }
    public static Color getInstance(int ch){
        switch (ch){
            case 0:
                return RED;
            case 1:
                return GREEN;
            case 2:
                return BLUE;
                default:
                    return null;
        }
    }
}

以上代码,JDK1.5前编写OK,但是很麻烦,getInstance方法没什么意义,且内部中实例化对象的个数未知。因此,JDK1.5开始提供了enum关键字,其可以实现与多例相同的功能,如下所示:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Color c = Color.RED;
        System.out.println(c);
    }
}

enum Color{
    RED,GREEN,BLUE;
}

多例是枚举的设计思想来源,所以枚举中定义对象都要用大写字母表示,此外,枚举的最大的支持在于可以实现所有枚举对象的遍历操作。

        for(Color c:Color.values()){
            System.out.println(c);
        }

2、java.lang.Enum类

使用enum定义的枚举类不属于一个新的结构,本质上相当于一个类继承了java.lang.Enum类的形式,观察下Enum类的定义形式:

public abstract class Enum> extends Object implements Comparable, Serializable

Enum类中定义的构造方法:

protected Enum(String name, int ordinal)

protected 权限表示只能在本包或不同包的子类才可以调用,其实就是构造方法的封装。该构造方法中第一个参数表示对象名字,第二个表示对象序号。

Enum类中有两个方法,可以取得名字和序号:

  • public final String name()
  • public final int ordinal()
        for(Color c:Color.values()){
            System.out.println(c.name()+c.ordinal());
        }

Java——枚举基础应用总结(多例设计模式、Enum类、枚举的实际应用)_第1张图片

枚举中的序号是根据对象的定义顺序来的。

【面试题】:请解释Enum与enum的区别?

  • enum是JDK1.5后新增的关键字,用来定义枚举;
  • Enum是一个抽象类,使用enum定义的枚举本质就相当于一个继承了Enum类。

3、枚举结构定义

枚举在Java中就属于一种特殊的类,但是类中的组成是很丰富的:属性、方法、构造方法、实现接口、继承抽象类,这些功能枚举都具备。

【举例】:定义其他结构

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        for(Color c:Color.values()){
            System.out.println(c.name()+c.ordinal()+c);
        }
    }
}

enum Color{
    RED("红色"),GREEN("绿色"),BLUE("蓝色");
    private String title;
    private Color(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Color{" +
                "title='" + title + '\'' +
                '}';
    }
}

Java——枚举基础应用总结(多例设计模式、Enum类、枚举的实际应用)_第2张图片

除了可以定义一些基本结构外,枚举也可以实现接口。对于接口的实现有两种模式:

【举例】:统一实现接口

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        IMessage msg = Color.RED;
        System.out.println(msg.getColor());
    }
}

enum Color implements IMessage{
    RED("红色"),GREEN("绿色"),BLUE("蓝色");
    private String title;
    private Color(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Color{" +
                "title='" + title + '\'' +
                '}';
    }

    @Override
    public String getColor() {
        return this.title;
    }
}
interface IMessage{
    public String getColor();
}

【举例】:每个枚举对象采用匿名内部类形式实现

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        IMessage msg = Color.RED;
        System.out.println(msg.getColor());
    }
}

enum Color implements IMessage{
    RED("红色"){
        public String getColor() {
            return "红色";
        }
    },GREEN("绿色"){
        public String getColor() {
            return "绿色";
        }
    },BLUE("蓝色"){
        public String getColor() {
            return "蓝色";
        }
    };
    private String title;
    private Color(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Color{" +
                "title='" + title + '\'' +
                '}';
    }
    
}
interface IMessage{
    public String getColor();
}

枚举中还可以定义抽象方法,实际上开发基本不会用~~包括以上的其他结构,了解即可,尽量不用。

4、枚举的实际应用

枚举就是表示一个类的对象选用范围,下面定义一个人的类,里面有性别。

【举例】:实现枚举的应用

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println(new Person("张三",10,Sex.MALE));
    }
}

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;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}

以上代码不使用枚举也可以实现,所以,开发中没有对枚举使用的强制限制,看个人习惯,熟悉C语言的可能会比较喜欢用。

5、总结

1)enum宇Enum类的关系;

2)枚举与多例设计模式的关系。

 

本文为博主原创文章,转载请注明出处,若本文对您有些许帮助,关注/评论/点赞/收藏,就是对我最大的支持,多谢!

你可能感兴趣的:(Java基础,多例设计模式与枚举,Enum类,枚举的实际应用)