创建型模式之多例模式

一.定义
  在多例模式中,多例类可以有多个实例,而且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。
  所谓多例(Multiton Pattern)实际上就是单例模式的自然推广。作为对象的创建模式,多例模式或多例类有以下的特点:
    1、多例类可以有多个实例
    2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例

  多例模式又划分为有上限多例模式和无上限多例模式两种;
  无上限多例模式:与直接new 对象没有什么区别
  有上限多例模式:实际上是单例模式的推广,如果它的上限是1,那么就成了单例模式了.
  
二、模式结构成员构成
• Multiton:多例
 
三.代码示例
多例模式的几个关键点就在于
1. 通过实例容器保存实例。
2. 利用私有构造阻止外部构造。
3. 提供getInstantce()方法获取实例
/**
 * 有限多例模式
 */
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);
    }
} 
View Code
 
 
四.优点和缺点分析
优点:
 > 可以控制类的实例数量
缺点:
 > 提高了类实例维护复杂度
 
五.应用场景
>当存在这样的类,只需要有限数量实例的情况下,可以使用多例
 
posted @ 2018-06-22 00:11  N!CE波  阅读(711)  评论(0编辑  收藏  举报