一.定义
在多例模式中,多例类可以有多个实例,而且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。
在多例模式中,多例类可以有多个实例,而且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。
所谓多例(Multiton Pattern)实际上就是单例模式的自然推广。作为对象的创建模式,多例模式或多例类有以下的特点:
1、多例类可以有多个实例
2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例
多例模式又划分为有上限多例模式和无上限多例模式两种;
1、多例类可以有多个实例
2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例
多例模式又划分为有上限多例模式和无上限多例模式两种;
无上限多例模式:与直接new 对象没有什么区别
有上限多例模式:实际上是单例模式的推广,如果它的上限是1,那么就成了单例模式了.
二、模式结构成员构成
• Multiton:多例
三.代码示例
多例模式的几个关键点就在于
1. 通过实例容器保存实例。
2. 利用私有构造阻止外部构造。
3. 提供
getInstantce()
方法获取实例
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/** * 有限多例模式 */ public class Multiton { private static final Multiton MULTITON_1 = new Multiton(); private static final Multiton MULTITON_2 = new Multiton(); private static List<Multiton> list = new ArrayList<Multiton>(); //用于放多个实例的list private static final int maxCount = 2;//最多的实例数 static { list.add(MULTITON_1); list.add(MULTITON_2); } private Multiton() { }//私有构造方法,避免外部创建实例 /** * @description: 随机拿取实例 */ public static Multiton getInstance() { Random random = new Random(); int current = random.nextInt(maxCount); return list.get(current); } /** * 工厂方法 * * @param i * @return */ public static Multiton getInstance2(int i) { switch (i) { case 1: return MULTITON_1; case 2: return MULTITON_2; default: return null; } } /** * @description: 指定拿取某一个实例 */ public static Multiton getInstance(int index) { return list.get(index); } }
四.优点和缺点分析
优点:
> 可以控制类的实例数量
缺点:
> 提高了类实例维护复杂度
五.应用场景
>当存在这样的类,只需要有限数量实例的情况下,可以使用多例