設計模式中最為熟悉的莫過於這兩種模式,而它們之間也有着很相似的地方。
單例模式(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; } }
享元工廠是這個模式的核心,了解這個類就可以了。