鱼C论坛

 找回密码
 立即注册
查看: 1837|回复: 0

java设计模式之多例模式

[复制链接]
发表于 2015-1-21 11:28:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个场景放到我们设计模式中就是叫有上限的多例模式(没上限的多例模式太容易了,和你直接 new 一
个对象没啥差别,以下是实现的代码:

  1. import java.util.ArrayList;
  2. import java.util.Random;

  3. class Emperor
  4. {
  5.    private static int maxNumOfEmperor = 2;
  6.    private static ArrayList emperorInfoLIst = new ArrayList(maxNumOfEmperor);
  7.    private static ArrayList emperorList = new ArrayList(maxNumOfEmperor);
  8.    private static int countNUmOfEmperor = 0;

  9.    static
  10.    {
  11.       for(int i=0; i < maxNumOfEmperor; i++)
  12.        {
  13.          emperorList.add(new Emperor("皇" + (i+1) + "帝"));
  14.        }
  15.    }

  16.    //就这么多啦! 不允许再次new一个对象出来
  17.    private Emperor(){}
  18.    private Emperor(String info)
  19.    {
  20.      emperorInfoLIst.add(info);
  21.    }

  22.    public static Emperor getInstance()
  23.    {
  24.       Random random = new Random();
  25.       countNUmOfEmperor = random.nextInt(maxNumOfEmperor);   //随机产生一个数字

  26.       return (Emperor)emperorList.get(countNUmOfEmperor);
  27.    }

  28.    //皇帝叫什么名字
  29.    public static void emperorINfo()
  30.    {
  31.      System.out.println(emperorList.get(countNUmOfEmperor));
  32.    }
  33. }




  34. public class ManySingle
  35. {
  36.    public static void main(String args[])
  37.    {
  38.       int ministerNum = 10;   //10个大臣

  39.       for(int i=0; i < ministerNum; i++)
  40.       {
  41.          Emperor emperor = Emperor.getInstance();
  42.          System.out.print("第"+(i+1) + "个大臣参拜的是:");
  43.          emperor.emperorINfo();
  44.       }
  45.    }
  46. }
复制代码
2015-01-21 11:29:57 的屏幕截图.png





本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 20:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表