黑马程序员技术交流社区

标题: 用单例设计个枚举。 [打印本页]

作者: wenbaoxing    时间: 2013-10-18 21:42
标题: 用单例设计个枚举。
本帖最后由 wenbaoxing 于 2013-10-19 11:28 编辑

当枚举只有一个元素时,就可以作为一种单例的实现方式。

给个代码?没有代码,不太理解!!!!
作者: wangyafeng1990    时间: 2013-10-18 21:52
public class KillPeople{
        
        public static void main(String[] args) {
                People.blackPeople.kill();
        }
        public enum People {
                blackPeople;
                public void kill(){
                        System.out.println("黑人被杀了");
                }
               
        }
}
作者: 風諾    时间: 2013-10-18 22:38
单例设计模式特点:只能让该类产生一个对象
实现方法:
1、private构造方法
2、内部创建一个private本类对象
3、提供方法获取该对象
枚举类特点:
1、内部元素有限个,而且是固定不变的(就是相当于一个橱柜罗列了很多东西)
2、构造方法也是private
3、通过匿名内部类实现方法

通过比较的话,可以看到,单例和枚举很像
private的构造方法决定了这两个类都不能通过外部代码创建对象
枚举类中的对象是在类中定义的,所以当枚举只有一个对象的时候,你无法创建其他对象,只能用它提供的,就成了单例

作者: aion2013tian    时间: 2013-10-19 08:37
单例模式的特点:构造方法私有化;内部创造私有化的对象;有且仅有一个对象;对外提供获取唯一对象的方法
枚举类的特点:构造方法私有化;内部元素为固定个数;通过匿名内部类实现方法
通过枚举实现单例的代码如下
public enum EnumDemo {
        Instance;
        public String name;

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }
       
        public static void main(String[] args) {
                Instance.setName("IT");
                System.out.println(Instance.getName());
        }

}
其实就是将枚举中的元素固定为一个,然后对枚举中的这个唯一的元素进行操作的啊
单例只是一种设计模式,而枚举是Java中的一种特殊类
作者: aion2013tian    时间: 2013-10-19 09:06
上面我回复的代码是用枚举实现的单例模式,下面我再用单例模式实现枚举,代码如下:
public enum SingletonOne {

        RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255);

        int redValue;
        int greenValue;
        int blueValue;

        private SingletonOne(int red, int green, int blue) {
                this.redValue = red;
                this.greenValue = green;
                this.blueValue = blue;
        }

        public int getRedValue() {
                return redValue;
        }

        public void setRedValue(int red) {
                this.redValue = red;
        }

        public int getGreenValue() {
                return greenValue;
        }

        public void setGreenValue(int green) {
                this.greenValue = green;
        }

        public int getBlueValue() {
                return blueValue;
        }

        public void setBlueValue(int blue) {
                this.blueValue = blue;
        }

        public static void main(String[] args) {
                System.out.println(SingletonOne.RED.getRedValue());
        }

}
用单例实现枚举就是把枚举中的每一个元素都写成一个单例




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2