zoukankan      html  css  js  c++  java
  • 《设计模式之禅》--单例扩展:多例模式

    需求:一个类只能产生两三个对象

    public class Emperor {
        //定义最多能产生的实例数量
        private static int maxNumOfEmperor = 2;
        //每个皇帝都有名字,使用一个ArrayList来容纳,每个对象的私有属性
        private static ArrayList<String> nameList = new ArrayList<String>();
        //定义一个列表,容纳所有的皇帝实例
        private static ArrayList<Emperor> emperorList = new ArrayList<Emperor>();
        //当前皇帝序列号
        private static int countNumOfEmperor = 0;
    
        //产生所有的对象
        static {
            for (int i = 0; i < maxNumOfEmperor; i++) {
                emperorList.add(new Emperor("皇" + (i + 1) + "帝"));
            }
        }
    
        private Emperor() {
            //世俗和道德约束你,目的就是不产生第二个皇帝
        }
    
        //传入皇帝名称,建立一个皇帝对象
        private Emperor(String name) {
            nameList.add(name);
        }
    
        //随机获得一个皇帝对象
        public static Emperor getInstance() {
            Random random = new Random();
            //随机拉出一个皇帝,只要是个精神领袖就成
            countNumOfEmperor = random.nextInt(maxNumOfEmperor);
            return emperorList.get(countNumOfEmperor);
        }
    
        //皇帝发话了
        public static void say() {
            System.out.println(nameList.get(countNumOfEmperor));
        }
    }
    public class Minister {
        public static void main(String[] args) {
            //定义5个大臣
            int ministerNum = 5;
            for (int i = 0; i < ministerNum; i++) {
                Emperor emperor = Emperor.getInstance();
                System.out.print("第" + (i + 1) + "个大臣参拜的是:");
                emperor.say();
            }
        }
    }

    运行结果如下

    第1个大臣参拜的是:皇1帝
    第2个大臣参拜的是:皇2帝
    第3个大臣参拜的是:皇1帝
    第4个大臣参拜的是:皇1帝
    第5个大臣参拜的是:皇2帝
  • 相关阅读:
    工作中常用的工具
    lua 调试、热重载
    Lua库收集
    Mac常见端口
    Swift 学习笔记1
    项目-微博(模仿新浪微博)
    iOS多线程
    iOSCoreData介绍
    iOS数据库操作流程
    iOS中数据库运用之前的准备-简单的数据库
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8434744.html
Copyright © 2011-2022 走看看