設計模式之多例模式


上一篇學習的是單例模式,那么相對的也就存在多例模式。

多例模式的定義與使用皆可以通過單例模式類推。

多例模式的定義:

作為對象的創建模式,多例模式中的多例類可以有多個實例,而且多例類必須自己創建、管理自己的實例,並向外界提供自己的實例。

多例模式的特點:

所謂的多例模式(Multiton Pattern),實際上就是單例模式的自然推廣。作為對象的創建模式,多例模式或多例類有如下的特點:

(1)多例類可有多個實例

(2)多例類必須自己創建、管理自己的實例,並向外界提供自己的實例。

(3)根據是否有實例上限分為:有上限多例類和無上限多例類。

 多例模式的具體實現:

package com.test.zhj;

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

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; // 正在被人尊稱的是那個皇帝
    // 先把2個皇帝產生出來
    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 com.test.zhj;

public class Minister {
    
    public static void main(String[] args) {  
        int ministerNum =10; //10個大臣  
        for(int i=0;i<ministerNum;i++){  
            Emperor emperor = Emperor.getInstance();  
            System.out.print("第"+(i+1)+"個大臣參拜的是:");  
            emperor.emperorInfo();  
        }  
    }

}

運行結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM