黑马程序员-Java基础加强,枚举类

手动实现枚举类,设计方式:

1.通过private将构造器隐藏起来

2.把这个类的所有可能实例都是用public static final属性来保存。

3.如果有必要可以提供一些静态方法,允许其他程序根据特定参数来获取与之匹配实例。

程序代码:

 1 package com.king.testseasons;
 2 
 3  
 4 
 5 public class Season {
 6 
 7  
 8 
 9 /**
10 
11  * 程序将定义Season季节类,这个类只能产生四个对象,该Season类被定义成枚举类。
12 
13  * @author 王者黑桃
14 
15  */
16 
17 //把Season类定义成不可变的,将其属性也定义成final
18 
19 private final String name;
20 
21 private final String desc;
22 
23 public static final Season SPRING=new Season("春天","风和日丽");
24 
25 public static final Season SUMMER=new Season("夏天","挥汗如雨");
26 
27 public static final Season AUTUMN=new Season("秋天","天高气爽");
28 
29 public static final Season WINTER=new Season("冬天","寒风刺骨");
30 
31 public static Season getSeason(int seasonNum){
32 
33 switch(seasonNum){
34 
35 case 1:
36 
37 return SPRING;
38 
39 case 2:
40 
41 return SUMMER;
42 
43 case 3:
44 
45 return AUTUMN;
46 
47 case 4:
48 
49 return WINTER;
50 
51 default:
52 
53 return null;
54 
55 }
56 
57 }
58 
59 //将构造器定义成private访问权限
60 
61 private Season(String name, String desc){
62 
63 this.name=name;
64 
65 this.desc=desc;
66 
67 }
68 
69 //只为name和desc提供getter方法
70 
71 public String getName(){
72 
73 return this.name;
74 
75 }
76 
77 public String getDesc(){
78 
79 return this.desc;
80 
81 }
82 
83  
84 
85 }
86 
87  

 

    上面的Season类是一个不可变类,在上面的Season类中包含了四个static final常量属性,这四个常量属性就代表了该类所能创建的对象。当其他程序需要Season对象时,即可通过如Season.SPRING的方式来获取Season对象,也可通过getSeason静态工厂方法来获得Season对象。

程序清单:

 1 package com.king.testseasons;
 2 
 3  
 4 
 5 public class SeasonTest {
 6 
 7  
 8 
 9 /**
10 
11  * @author 王者黑桃
12 
13  */
14 
15 public SeasonTest(Season s){
16 
17 System.out.println(s.getName()+",最大的特点:"+s.getDesc());
18 
19 }
20 
21 public static void main(String[] args) {
22 
23 // 直接使用Season的SPRING常量代表一个Season对象
24 
25 new SeasonTest(Season.SPRING);
26 
27  
28 
29 }
30 
31  
32 
33 }

 

    从上面程序中不难看出,使用枚举类可以是程序更加健硕,避免创建对象的随意性。

posted @ 2014-01-05 16:36  code4a  阅读(159)  评论(0编辑  收藏  举报