設計模式 享元模式

2021-08-13 13:51:48 字數 3567 閱讀 8071

個人理解:

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 

public abstract void

showword(string str);

}

具體享元concreteflyweight(單純享元、復合享元):

public class wordshow extends word 

@override

public void

showword(string str)

}

復合享元concretecompositeflyweight(復合享元):

public class wordshowcomplex extends word 

}public void

addword(word word)

public void

addword(string key)

if (!wordmap.containskey(key))

}public int

getcount()

}

享元工廠flyweightfactory:

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個棋子。現在要實現乙個圍棋程式,該怎麼辦呢?首先要考慮的是棋子棋盤的實現,可以定義乙個棋子的類,成員變數包括棋子的顏色 形狀 位置等資訊,另外再定義乙個棋盤的類,成員變數中有個容器,用於存放棋子的物件。下面給出 表示 棋子的定義,當然棋子的屬性除了...