设计模式-多例模式

2023-05-16

参考:设计模式之禅

目录

  • 多例模式
  • 类图
  • 实现
    • 1. 皇帝
    • 2. 大臣
  • 运行结果
  • 补充

多例模式

这种情况有没有?有!大点声,有没有? 有!,是,确实有,就出现在明朝,那三国期间的算不算,
不算,各自称帝,各有各的地盘,国号不同。大家还记得那首诗《石灰吟》吗?作者是谁?于谦,他是被
谁杀死的?明英宗朱祁镇,对,就是那个在土木堡之变中被瓦刺俘虏的皇帝,被俘虏后,他弟弟朱祁钰当
上了皇帝,就是明景帝,估计当上皇帝后乐疯了,忘记把老哥朱祁镇削为太上皇了,我 Shit,在中国的历
史上就这个时期是有 2 个皇帝,你说这期间的大臣多郁闷,两个皇帝耶,两个精神依附对象呀。
这个场景放到我们设计模式中就是叫有上限的多例模式(没上限的多例模式太容易了,和你直接 new 一
个对象没啥差别,不讨论)怎么实现呢,看我出招,先看类图:

类图

在这里插入图片描述

实现

1. 皇帝

package DesignModel_4;

import java.util.ArrayList;
import java.util.Random;

/**
 * 皇帝
 */
public class Emperor {
    //最多只能有连个皇帝
    private static final int maxNumOfEmperor = 2;
    //皇帝叫什么名字
    private static final ArrayList emperorInfoList = new ArrayList(maxNumOfEmperor);
    //装皇帝的列表;
    private static final ArrayList emperorList = new ArrayList(maxNumOfEmperor);
    //正在被人尊称的是那个皇帝
    private static int countNumOfEmperor =0;

    //先把2个皇帝产生出来
    static{
        //把所有的皇帝都产生出来
        for(int i=0;i<maxNumOfEmperor;i++){
            emperorList.add(new Emperor("皇"+(i+1)+"帝"));
        }
    }
    //就这么多皇帝了,不允许再推举一个皇帝(new 一个皇帝)
    private Emperor(){
        //世俗和道德约束你,目的就是不让你产生第二个皇帝
    }
    private Emperor(String info){
        emperorInfoList.add(info);
    }
    public static Emperor getInstance(){
        Random random = new Random();
        //随机拉出一个皇帝,只要是个精神领袖就成
        countNumOfEmperor = random.nextInt(maxNumOfEmperor);
        return (Emperor)emperorList.get(countNumOfEmperor);
    }
    //皇帝叫什么名字呀
    public static void emperorInfo(){
        System.out.println(emperorInfoList.get(countNumOfEmperor));
    }
}

2. 大臣

package DesignModel_4;

/**
 * 大臣
 */
public class Minister {
    public static void main(String[] args) {
        //10个大臣
        int ministerNum =10;
        for(int i=0;i<ministerNum;i++){
            Emperor emperor = Emperor.getInstance();
            System.out.print("第"+(i+1)+"个大臣参拜的是:");
            emperor.emperorInfo();
        }
    }
}

运行结果

第1个大臣参拜的是:皇1帝
第2个大臣参拜的是:皇2帝
第3个大臣参拜的是:皇2帝
第4个大臣参拜的是:皇1帝
第5个大臣参拜的是:皇2帝
第6个大臣参拜的是:皇1帝
第7个大臣参拜的是:皇2帝
第8个大臣参拜的是:皇2帝
第9个大臣参拜的是:皇1帝
第10个大臣参拜的是:皇2帝

补充

那各位看官就可能会不屑了:有的大臣可是有骨气,只拜一个真神,你怎么处理?这个问题太简单,
懒的详细回答你,getInstance(param)是不是就解决了这个问题?!自己思考,太 Easy 了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式-多例模式 的相关文章

  • git http-backend基于centos7 httpd

    需要用户名密码的访问 网上已经有人分享了 如果想看 需要用户名密码的访问请出门右转 https www cnblogs com badwood316 p 6398616 html 这里的配置是一种不需要用户名密码 同时可以glone的方式
  • 【ZABBIX】zabbix监控软件5.0版本的安装和使用

    文章目录 一 关闭selinux和防火墙二 下载并安装Zabbix三 测试验证四 添加监控主机 xff08 实例 xff1a crond 43 出图 xff09 警告 微信 钉钉 前言 xff1a zabbix服务器需关闭SELinux 开
  • Mariadb(MySql)开启SSL简明教程

    1 生成CA root 64 www genrsa 2048 gt ca key pem root 64 www openssl req new x509 nodes days 365000 key ca key pem out ca ce
  • Katex、Latex语法手册

    莱斯Rice大学的一个语法手册 xff0c 手册链接 网盘地址 xff1a 链接 xff1a https pan baidu com s 1baoNr XBP oGEfbbqcEPA 提取码 xff1a ob47
  • 工单管理系统otrs

    CentOS7 4安装配置ORTS工单系统 环境 IP 系统 服务 数据库 账户 密码 172 20 17 95 Centos7 4 ORTS root root WEB地址 xff1a 172 20 17 95 otrs index pl
  • 画图工具汇集

    技术传播的价值 xff0c 不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径 加速业务的上线速率 xff0c 也体现在优秀工程师的工作效率提升 产品性能优化和用户体验改善等经验方面的分享 xff0c 以提高我们的专业能力 接下来
  • 常见数据库版本

    SQL Server安装包 考虑到好些新手同学不知道怎么下载自己所需的数据库软件安装包 xff0c 特分享一些我收藏的安装包 现分享SQL Server的一些安装包给大家 根据自身需求下载 xff0c 新手朋友建议下载SQL Server
  • 思维导图工具集

    浏览所有国外资源时使用可以实时网页翻译的浏览器 例如Google Chrome QQ浏览器 360浏览器 Firefox浏览器等 xmind 功能 XMind 一个功能齐全的思维导图和头脑风暴工具 旨在产生想法 激发创造力 提高工作和生活的
  • 自动化运维一体化

    运维一体化中的平台一体化 xff0c 指的是运维一体化与平台一体化 xff0c 其中运维一体化是数据中心在运维方面的运营体系 xff0c 它包括三方面 xff1a 人员组织一体化 流程一体化 平台一体化 一 转型 xff1a 和目前大部从运
  • 技术文档写作

    科技文排版技巧 目录 一 段落格式的设定 2 二 设置标题 3 三 利用 导航 选项 xff0c 对论文进行快速定位 xff08 建立在3的基础上 xff09 4 四 插入 分页符 和 分节符 5 五 页码的设置 6 六自动目录生成 xff
  • 资料目录三

    需要更多资料请添加微信 xff1a Stestack 毕设项目 美食美刻网站制作 视频http yun itheima com course 253 html 资料链接 xff1a http pan baidu com s 1dFkYBXv
  • VMware虚拟机ubuntu显示屏幕太小解决办法

    1 安装VMware Tool需要用到虚拟光驱 xff0c 加载一个ISO文件 2 从 media 中复制到 opt下 3 击ubuntu左侧列表里的DVD图标 xff0c 就会出现VMware Tools的安装文件VMwareTools
  • 面向edas开发的规范

    前言 概述 本文档 主要介绍了 服务开发者基于Aliware做项目开发时 xff0c 从项目环境搭建 xff0c 项目开发 xff0c 项目上线及Aliware 服务功能相关的使用 说明 xff0c 操作步骤及代码示例 应用范围 服务开发者
  • 用 Python 进行金融数据可视化

    用 Python 进行金融数据可视化 Python量化的关键是金融数据可视化 xff0c 无论是传统的K线图 xff0c 还是现在的策略分析 xff0c 都需要大量的可视化图表 具体到编程代码 xff0c 就是使用Python绘图模块库绘图
  • Ubuntu双屏的副屏抖动闪烁

    将设置按如下即可 xff1a
  • 日志切割的方法

    一 关于日志切割 日志文件包含了关于系统中发生的事件的有用信息 xff0c 在排障过程中或者系统性能分析时经常被用到 对于忙碌的服务器 xff0c 日志文件大小会增长极快 xff0c 服务器会很快消耗磁盘空间 xff0c 这成了个问题 除此
  • 软件测试的四个阶段

    软件测试的对象包括软件需求 概要设计 详细设计 软件运行环境 可运行程序和软件源代码等 软件测试包括质量 人员 资源 技术和流程五大要素 xff0c 以及测试覆盖率和测试效率两个目标 软件测试一般分为4个阶段 xff1a 单元测试 集成测试
  • Rabbitmq实现多系统间的分布式事务,保证数据一致性

    Rabbitmq实现多系统间的分布式事务 xff0c 保证数据一致性 一 实验环境二 实验目的三 实验方案四 实验步骤1 消息队列1 1 rabbitmq安装过程略过 1 2 创建订单交换器 xff1a orderExchange1 3 创
  • Android -Lottie加载动画喂饭指南

    什么是Lottie 简单的说 xff0c Lottie就是airbnb开源的一个使用json文件快速加载动画且支持多平台的库 更多介绍请查看官网 官网地址 xff1a https airbnb design lottie 怎么使用Lotti
  • Ubuntu安装汉化版Portainer(Docker图形UI界面)

    1 找镜像 docker search dockerui NAME DESCRIPTION STARS OFFICIAL AUTOMATED abh1nav dockerui An updated version of crosbymich

随机推荐