個人理解:
1. 享元模式主要用於減少建立物件的數量,以減少記憶體占用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。
2. 享元模式可以看做是乙個物件池,存放的都是單例物件,是不重複的,如果我們建立乙個物件,正好物件池裡面已經存在,就直接復用即可,不需要重新建立。如果建立的物件物件池裡面沒有,就建立乙個物件加入這個物件池,方便下次使用。
3. 享元模式可分為:單純享元模式、復合享元模式
(1)單純享元:所有的享元物件都是單純享元物件,也就是說都是可以直接共享的,單純享元uml圖如下:
(2)復合享元:將一些單純享元使用合成模式加以復合,形成復合享元物件。這樣的復合享元物件本身不能共享,但是組成復合享元的單純享元可以內部共享。復合享元uml圖如下:
4. 享元儲存情況:
(1)單純享元模式具體享元儲存於享元工廠flyweightfactory類的map集合中;
(2)在示例**中,復合享元模式的具體享元有兩種儲存情況:
a. 通過復合享元的addword(string key) 儲存,在復合享元中建立共享的單純享元,僅在復合享元的map集合中儲存單純享元
b. 通過復合享元的addword(word word) 儲存,在享元工廠中建立共享的單純享元,在享元工廠的map集合&&復合享元的map集合中都有儲存單純享元
5. 示例**:
抽象享元:flyweight:
public abstract class word具體享元concreteflyweight(單純享元、復合享元):public abstract void
showword(string str);
}
public class wordshow extends word復合享元concretecompositeflyweight(復合享元):@override
public void
showword(string str)
}
public class wordshowcomplex extends word享元工廠flyweightfactory:}public void
addword(word word)
public void
addword(string key)
if (!wordmap.containskey(key))
}public int
getcount()
}
public class wordfactory客戶端呼叫:if (!wordmap.containskey(key))
return
wordmap.get(key);
} public int
getwordcounts()
public word getwordshowcomplex(listkeylist)
return
wordshowcomplex;}
public int
getwordshowcomplexcount()
}
private void執行結果:factoryflyweight()
}
12-14 17:42:09.842 1473-1473/com.wdp.designtest i/showword: ------張華說:天王蓋地虎------
12-14 17:42:09.843 1473-1473/com.wdp.designtest i/factoryflyweight: ****************單純享元模式wo***ctory中word數量:1****************
12-14 17:42:09.843 1473-1473/com.wdp.designtest i/showword: ------張華說:寶塔鎮河妖------
12-14 17:42:09.843 1473-1473/com.wdp.designtest i/factoryflyweight: ****************單純享元模式wo***ctory中word數量:1****************
12-14 17:42:09.843 1473-1473/com.wdp.designtest i/showword: ------趙鵬說:玉帝x王母------
12-14 17:42:09.843 1473-1473/com.wdp.designtest i/factoryflyweight: ****************單純享元模式wo***ctory中word數量:2****************
12-14 17:42:09.843 1473-1473/com.wdp.designtest i/factoryflyweight: ****************單純享元模式是否可以共享物件:true****************
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/showword: ------趙鵬說:吃葡萄不吐葡萄皮------
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/showword: ------張華說:吃葡萄不吐葡萄皮------
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/showword: ------李帥說:吃葡萄不吐葡萄皮------
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/factoryflyweight: ****************復合享元模式wo***ctory wordc1中word數量:3****************
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/showword: ------趙鵬說:不吃葡萄倒吐葡萄皮------
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/showword: ------張華說:不吃葡萄倒吐葡萄皮------
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/showword: ------李帥說:不吃葡萄倒吐葡萄皮------
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/factoryflyweight: ****************復合享元模式wo***ctory wordc2中word數量:3****************
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/factoryflyweight: ****************單純享元模式wo***ctory中word數量:3****************
12-14 17:42:09.844 1473-1473/com.wdp.designtest i/factoryflyweight: ****************復合享元模式是否可以共享物件:false****************
設計模式(享元模式)
享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...
設計模式 享元模式
享元模式flyweight flyweight 模式是乙個提高程式效率和效能的模式 會大大加快程式的執行速度。把物件中使用比較多,具有共同點的,拿出來做成乙個共享類,這樣就行成了共享模式。如 integer 物件在 128 127 使用的是同乙個物件。在這之間是共享的。享元中的角色 flyweigh...
設計模式 享元模式
舉個圍棋的例子,圍棋的棋盤共有361格,即可放361個棋子。現在要實現乙個圍棋程式,該怎麼辦呢?首先要考慮的是棋子棋盤的實現,可以定義乙個棋子的類,成員變數包括棋子的顏色 形狀 位置等資訊,另外再定義乙個棋盤的類,成員變數中有個容器,用於存放棋子的物件。下面給出 表示 棋子的定義,當然棋子的屬性除了...