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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LuckyQS 中级黑马   /  2014-1-6 13:25  /  1457 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 LuckyQS 于 2014-1-9 13:40 编辑

求大神用枚举写一个单例设计模式

8 个回复

倒序浏览
为什么不用注解类型写呢?
回复 使用道具 举报
sd110572 发表于 2014-1-6 13:30
为什么不用注解类型写呢?

注解类型中写单例貌似不方便吧,还是有什么其他好处吗,说一下哈,我不太清楚。
而且在注解类中使用枚举来创建单例的话,是不成立的,编译会通过,
但是你调用枚举中的方法的时候,运行会报错,内部好像使用了代理,
代理的那个包访问不到枚举所在的包。
回复 使用道具 举报
使用枚举来创建单例是很方便的,类型固定,取值固定,我感觉比懒汉饿汉式好一些,
当然只是个人见解,代码也很简单,就和我们定义类一样,我写个小例子,你当参考。
  1. public static void main(String[] args)  {
  2. //                对单例进行调用:               
  3.                 SingleDemo single = SingleDemo.SINGLE;
  4.                 System.out.println(single.getName());
  5.         }


  6. enum SingleDemo{
  7. //        定义单例实例,记得放在第一行且只定义一个元素
  8.         SINGLE;
  9. //        定义成员属性,可定义若干
  10.         private String name = "single of enum";
  11. //        定义成员方法,可定义若干
  12.         public String getName(){
  13.                 return name;
  14.         }
  15.        
  16. }

  17. //        也可定义带参构造方法和抽象方法,不过这些需要在枚举元素定义的时候就实现,以下为参考代码:
  18. enum SingleDemo1{
  19.         SINGLE("hello"){
  20.                 public String getName(){
  21.                         return name;
  22.                 }

  23.         };
  24.        
  25.         public String name = "world";
  26.        
  27.         SingleDemo1(String name){
  28.                 this.name = name;
  29.         }
  30.        
  31.         public abstract String getName();
  32.        
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
枚举相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表后面要有分号与其他元素分隔,,不能把枚举中的成员方法或成员变量放在枚举元素前面,不然报错;
定义枚举实现抽象方法(一匿名内部类形式)
枚举只有一个成员时,就可以作为一种单例的实现方式;
详见张孝祥老师的“交通灯视频”;
Public enum Trafficlamp{
RED(30){
Public Trafficlame nextLamp(){
Return GREEN;
}
}
Public abstract Trafficlamp nextLamp();
Private int time;
Private Trafficlamp(int time){
This.time=time;
}
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
doitforyou 发表于 2014-1-6 15:33
注解类型中写单例貌似不方便吧,还是有什么其他好处吗,说一下哈,我不太清楚。
而且在注解类中使用枚举 ...

最近膜拜国外大神写的东西,其实我也在摸索,有感而发而已
我甚至连个MOD都很难写出来

Minecraft.part1.rar

2 MB, 下载次数: 96

Minecraft.part2.rar

2 MB, 下载次数: 92

Minecraft.part3.rar

103.47 KB, 下载次数: 82

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
用枚举做单例,只需要定义一个元素就行了
代码实现:public enum singleModel{
SINGLE(“参数”){
复写抽象方法
public abstract  返回值类型 singleMethod(){
//具体实现代码
}
}
private singleModel(参数列表){
//具体实现代码
}
public abstract singleMethod();
}
回复 使用道具 举报
对不起那个抽象方法少个返回值,public abstract 返回值类型 singleMethod();纠正一下

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
enum Single2{
    ONE;
    private Single2(){}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马