A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wenbaoxing 中级黑马   /  2013-10-18 21:42  /  1485 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wenbaoxing 于 2013-10-19 11:28 编辑

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

给个代码?没有代码,不太理解!!!!

评分

参与人数 1黑马币 +3 收起 理由
李江 + 3 赞一个!

查看全部评分

4 个回复

倒序浏览
public class KillPeople{
        
        public static void main(String[] args) {
                People.blackPeople.kill();
        }
        public enum People {
                blackPeople;
                public void kill(){
                        System.out.println("黑人被杀了");
                }
               
        }
}
回复 使用道具 举报
单例设计模式特点:只能让该类产生一个对象
实现方法:
1、private构造方法
2、内部创建一个private本类对象
3、提供方法获取该对象
枚举类特点:
1、内部元素有限个,而且是固定不变的(就是相当于一个橱柜罗列了很多东西)
2、构造方法也是private
3、通过匿名内部类实现方法

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

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
单例模式的特点:构造方法私有化;内部创造私有化的对象;有且仅有一个对象;对外提供获取唯一对象的方法
枚举类的特点:构造方法私有化;内部元素为固定个数;通过匿名内部类实现方法
通过枚举实现单例的代码如下
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中的一种特殊类

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
上面我回复的代码是用枚举实现的单例模式,下面我再用单例模式实现枚举,代码如下:
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());
        }

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

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 这样更加深理解...

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马