單例模式與享元模式


設計模式中最為熟悉的莫過於這兩種模式,而它們之間也有着很相似的地方。

單例模式(Singleton)的定義:是為了確保一個類只能產生一個實例,從而節省對象創建所花費的時間,從而對系統內存使用頻率也會減低。

享元模式(FlyWeight)的定義:是為系統中存在多個相同的對象,那么只需要共享一個對象的拷貝。

個人認為從這兩個模式的定義而言,它們的目的是一樣的,至少就內存的開銷問題這點,兩者是相同的。而享元模式可以看成是單例的一個擴展。

下面是單例的實現方式:

 1 public class SingleDevise {
 2 
 3     private SingleDevise(){}
 4     
 5     private static SingleDevise single=null;
 6     
 7     public static synchronized SingleDevise getIntance(){
 8         if(single==null){
 9             single=new SingleDevise();
10         }
11         return single;
12             
13     }
14 }

     上面的代碼接對象的生成做了延遲加載,它的時耗會高一點,但是確保系統啟動時沒有額外的負載,這里我還想說的時,雖然就單例模式中的私有構造函數,

就一般做法時沒法在外面得到它的實例對象,但是對於極端的做法通過反射機制還是能夠解決這種問題的。所以我覺得單例的實現還不是很完善。

    而享元模式的實現相對會比較復雜點。首先它的角色需要有 享元工廠,抽象享元,具體享元類,main

但是實現還是比較容易的

public class FlyweightFactory {
    
    Map<String, Employer> map=new HashMap<String, Employer>();
    
    public Employer getEmployer(String name){
        Employer e=map.get(name);
        if(e==null){
            System.out.println("map is empty");
            e=new Employer(name);
            map.put(name, e);
        }
        return e;
    }

}

享元工廠是這個模式的核心,了解這個類就可以了。

 

 


免責聲明!

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



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