多例模式(Multition Pattern)_java设计模式04_架构师之路第一章

本文介绍了多例模式,它是单例模式的扩展,允许创建多个实例但限制了实例的数量。通过一个皇帝例子展示了多例模式的实现,其中皇帝类限制为两个实例,随机返回供大臣参拜。多例模式提高了对象复用性和系统性能,常用于线程池和数据库连接池等场景。
摘要由CSDN通过智能技术生成

一、多例模式的定义

多例模式(Multiton Pattern):实际上就是单例模式的自然推广,属于对象创建类型的模式,多例模式其实就是限制了对象的数量,并且有可能对对象进行重复使用

特点
 1:多例可以有多个实例
 2: 多例类必须能够自我创建并管理自己的实例,并且向外界提供自己的实例

二、多例模式的应用场景

 在java学习过程中,有一个池子的概念一直存在,好比作线程池,数据库连接池,这个池子是用来对线程,或者数据库连接对象进行管理的,第一,限制了池子中的对象数量,第二就是能够在使用过程中达到复用的效果,线程中的线程在执行完毕后,不会被直接回收掉,而会切换成等待状态,等待下一个任务提交,执行。数据库连接池也是如此,数据库操作在连接的时候,如果对数据库操作完毕后,会把资源释放,然后等待下一个数据库操作进行连接。这种设计其实是将对象的应用最大化了,避免了每次连接的时候都需要去创建一个对象。造成对象冗余或者内存升高。

三、多例模式的类图UML

在这里插入图片描述

四、多例模式demo示例

案例一
 首先讲一个历史故事,明朝有一段时期曾经出现两个皇帝,明英宗朱祁镇,在土木堡之变中被瓦刺俘虏,被俘虏后,他弟弟朱祁钰当上了皇帝,就是明景帝,估计当上皇帝后乐疯了,忘记把老哥朱祁镇削为太上皇了,在中国的历史上就这个时期是有 2 个皇帝,你说这期间的大臣多郁闷,两个皇帝耶,两个精神依附对象呀。

首先根据上述我们画出类图
在这里插入图片描述

编写实现代码

import java.util.ArrayList;
import java.util.Random;
/**
 * 只能产生两个对象,即两个皇帝。
 * */
public class Emperor {
	

	private static int maxNumberOfEmperor = 2;//最多有两个皇帝
	private static ArrayList<String> emperorInfoList = new ArrayList<String>(maxNumberOfEmperor);//存放皇帝的名字
	private static ArrayList<Emperor> emperorList = new ArrayList<Emperor>(maxNumberOfEmperor);//存放两个皇帝
	private static int countNumberOfEmperor = 0;//当前被尊重的皇帝
	
	//先把皇帝产出来
	static {
		for(int i = 0 ; i < maxNumberOfEmperor; i++){
			emperorList.add(new Emperor("皇"+(i+1)+"帝"));
		}
	}
	
	//无参构造器
	private Emperor() {
	}
	
	//带参构造器,传入皇帝的名字
	private Emperor(String info) {
		emperorInfoList.add(info);
	}
    
	//随机取出一个皇帝。
	public static Emperor getInstance(){
		Random random = new Random();
		countNumberOfEmperor = random.nextInt(maxNumberOfEmperor);
		return emperorList.get(countNumberOfEmperor);
	}
	
	//获取当前皇帝的名字
	public static String emperorInfo(){
		return emperorInfoList.get(countNumberOfEmperor);
	}
}
public class Minister {
	public static void main(String[] args) {
		int minister = 10;//有十个大臣
		for(int i = 0 ; i < minister ; i++){
			Emperor emperor = Emperor.getInstance();
			System.out.println("第"+(i+1)+"个大臣参拜的是:" + emperor.emperorInfo());
		}
	}
}

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

五、多例模式的优缺点

优点
 1.提高对象的复用性,降低内存消耗,提高应用的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值