一、概述
多例模式(Multiton Pattern),这种设计模式也属于对象创建型模式,本质上就是单例模式的推广
定义:
一个类有多个实例且由类本身创建和管理自己的实例,并向外部提供访问点。
二、理解
关键点:
1)一个类可有多个实例
如果一个类仅有一个实例,就是单例模式(所以单例模式是多例模式的特例)
如果一个类有有限个实例,称为有上限多例(如枚举)
如果一个类的实例个数不确定,称为无上限多例
2)所有实例是由类自己创建
即所有实例外部不能创建(私有化构造器)
3)所有实例都是由类自己管理(什么时候创建,怎么创建,存放地点,什么时候销毁)
所以实例要保存在类的静态量中
4)要向外部提供访问点(静态变量/静态方法)
提供一个公开的静态方法访问即可
注:普通的类也可以有多个实例,但其实例一般是外部new创建和管理的,这种不是多例模式
三、实现
1、有上限的多例类
分几种情况
a)如果此类实例数量较小,可直接使用静态变量一个一个保存即可
如一副麻将牌中只有两个骰子,这可以创建一个骰子类,有两个实例
b)如果此类实例数量较多,这可以使用静态的聚集(如数组,集合等)来保存
如一副扑克牌有54张,这可以创建一个Card类,有54个实例
2、无上限的多例类
这里的无上限不是无限,而是指无法确定实例的个数,如
一个颜色类,不同的实例表示不同的颜色,我们不确定外部会使用哪些颜色,外部一般也不可能使用全部颜色
所以没有必要提前创建所有的颜色实例,而是使用公开静态变量提供常用颜色访问,
公开静态方法提供所有颜色访问且提供缓冲功能(再次访问同一个颜色,则不新建)
四、总结
多例模式的重点是实例是由类自己创建和管理,这是区分多例模式的最重要的一点
javase的API中使用到多例模式的有
java.util.ResourceBundle
java.util.Local
java.text.NumberFormat
java.awt.Color
....