0%

Java设计模式之多例模式

多例模式是相对于单例模式而言的,指的是最多有固定数量的实例,如果数量不限,直接new就可以了,不存在模式一说。这个用得比较少。

package com.pocketdigi.patterns.multition;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 多例模式
 */
public class Multition {
    String name;
    // 实例数
    private static final int MAX_INSTANCE = 2;
    private static List instanceList = new ArrayList(MAX_INSTANCE);
    private static List instanceInfoList = new ArrayList(MAX_INSTANCE);
    static {
        for (int i = 0; i < MAX_INSTANCE; i++) {
            String n1 = "name" + i;
            Multition m1 = new Multition(n1);
            instanceList.add(m1);
        }
    }

    /**
     * 随机返回一个实例
     */
    public static Multition getInstance() {
        Random r = new Random();
        return instanceList.get(r.nextInt(MAX_INSTANCE));
    }

    /**
     * 返回指定的实例
     * @param name
     * @return
     */
    public static Multition getInstance(String name) {
        int index = instanceInfoList.indexOf(name);
        if (index >= 0)
            return instanceList.get(instanceInfoList.indexOf(name));
        return null;
    }

    private Multition(String name) {
        this.name = name;
        instanceInfoList.add(name);
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return name;
    }

}

调用:

        for(int i=0;i<10;i++)
        {
            System.out.println(Multition.getInstance());
        }
        System.out.println(Multition.getInstance("name1"));