美文网首页
多例模式

多例模式

作者: 辽A丶孙悟空 | 来源:发表于2020-03-20 07:00 被阅读0次

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



然后看程序,先把两个皇帝定义出来:

package com.qssqc.multiton;

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

/**
* 中国的历史上一般都是一个朝代一个皇帝,有两个皇帝的话,必然要PK出一个皇帝出来。
* 问题出来了:如果真在一个时间,中国出现了两个皇帝怎么办?比如明朝土木堡之变后,
* 明英宗被俘虏,明景帝即位,但是明景帝当上皇帝后乐疯了,
* 竟然忘记把他老哥明英宗削为太上皇, 也就是在这一个多月的时间内,中国竟然有两个皇帝!
* 
* @author 清水三千尺
*
*/
@SuppressWarnings("all")
public class Emperor {
  private static int maxNumOfEmperor = 2; // 最多只能有连个皇帝
  private static ArrayList emperorInfoList = new ArrayList(maxNumOfEmperor); // 皇帝叫什么名字
  private static 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));
  }
}

那大臣是比较悲惨了,两个皇帝呀,两个老子呀,怎么拜呀,不管了,只要是个皇帝就成:

package com.qssqc.multiton;

/**
* 大臣们悲惨了,一个皇帝都伺候不过来了,现在还来了两个皇帝 
* TND,不管了,找到个皇帝,磕头,请安就成了!
* 
* @author 清水三千尺
*
*/
@SuppressWarnings("all")
public class Minister {
  public static void main(String[] args) {
      int ministerNum = 10; // 10个大臣
      
      for (int i = 0; i < ministerNum; i++) {
          Emperor emperor = Emperor.getInstance();
          System.out.print("第" + (i + 1) + "个大臣参拜的是:");
          emperor.emperorInfo();
      }
      
  }
}
结束语
代码结构
运行结果

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

相关文章

  • 多例模式

    这种情况有没有?有!大点声,有没有? 有!,是,确实有,就出现在明朝,那三国期间的算不算,不算,各自称帝,各有各的...

  • 设计模式4 - 多例模式【Multition Pattern】

    多例模式 定义:作为对象的创建模式,多例模式中的多例类可以有多个实例,而且多例类必须自己创建、管理自己的实例,并向...

  • 24种设计模式之多例模式(Multition Pattern)

    单例模式和多例模式说明: 1. 单例模式和多例模式属于对象模式。 2. 单例模式的对象在整个系统中只有一份,多例模...

  • 多例模式(Multiton)

    多例模式被公认为是反面模式,为了获得更好的可测试性和可维护性,请使用『依赖注入模式』。 1.4.1. 目的 多例模...

  • 老王讲设计模式(四)——多例模式

    多例模式:在多例模式中,多例类可以有多个实例,而且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。 早...

  • PHP设计模式之多例模式(Multiton)代码实例大全(四)

    目的 多例模式是指存在一个类有多个相同实例,而且该实例都是该类本身。这个类叫做多例类。 多例模式的特点是: 多例类...

  • Spring详解(二) 简单配置bean

    配置applicationContext.xml为单例模式,多例模式,以及延迟初始化等 同时配置了单例或多例模式,...

  • 模板方法模式+多例模式

    最近看了设计模式和锁的一些知识,就想着自己写点什么巩固一下知识。 然后就随便写了一个类似(也许不像)连接池的这么一...

  • 第十七章 多例模式(Multition)

    一、多例模式是单例模式的推广,特点: 多例类可有多个实例 多例类必须自己创建、管理自己的实例,并向外界提供自己的实...

  • 单 / 多例设计模式

    单例设计模式 为了保证整个代码在操作的过程中,只会存在唯一的一个实例化对象,并且不可更改,则可利用final申明。...

网友评论

      本文标题:多例模式

      本文链接:https://www.haomeiwen.com/subject/vvokyhtx.html