1、定义:作为对象的创建模式,多例模式中的多例类可以有多个实例,而且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。(可以控制自己想外界提供多少个实例)(这仅仅是学习笔记哦,真有了什么更深的理解,我会往上加的)
2、特点:
(1)多例类可以有多个实例。
(2)多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。
(3)根据是否有实例上线,可分为有上限多例类和无上限多例类。
3、代码举例,就以设计模式之禅中的例子为准:
package org.mn.mulitition_pattern;
import java.util.ArrayList;
import java.util.Random;
/**
* @Description: 多例模式测试,多例类
* @Author: MengNing
* @CreateDate: 2019/6/11 22:06
* @UpdateUser:
* @UpdateDate: 2019/6/11 22:06
* @UpdateRemark:
* @Version: 1.0
*/
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;
// 先获取两个对象
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 org.mn.mulitition_pattern;
/**
* @Description:
* @Author: MengNing
* @CreateDate: 2019/6/11 22:46
* @UpdateUser:
* @UpdateDate: 2019/6/11 22:46
* @UpdateRemark:
* @Version: 1.0
*/
public class Minsiter {
public static void main(String[] args) {
int ministerNum = 10;
for (int i = 0; i < ministerNum; i++) {
Emperor emperor = Emperor.getInstance();
System.out.print("第"+(i+1)+"个人获取的对象是:");
emperor.emperorInfo();
}
}
}
运行结果:
最近才用上IDEA,感觉是真的好用,不过公司还是用的eclipse,IDEA还是我自己慢慢熟悉吧