享元模式
http://www.cnblogs.com/java-my-life/archive/2012/04/26/2468499.html
示例:
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- public class Test {
- /**
- * 複合的享元模式: 複合享元是不能共享的。 但是複合享元是可以分解為可共享的單純享元。
- */
- public static void main(String[] args) {
- FlyweightFactory f = new FlyweightFactory();
- Flyweight fly = f.factory("aba");
- fly.operation("charles");
- f.checkFlyweight();
- }
- }
- /**
- * 抽象享元
- */
- abstract class Flyweight {
- public abstract void operation(String extrinsicState);
- }
- /**
- * 具體享元
- */
- class ConcreteFlyweight extends Flyweight {
- private Character inState;
- public ConcreteFlyweight(Character inState) {
- this.inState = inState;
- }
- /**
- * 外蘊狀態改變方法行為,但不會改變內蘊狀態
- */
- @Override
- public void operation(String extState) {
- String str = "inState:" + inState + ";extState:" + extState;
- System.out.println(str);
- }
- }
- /**
- * 複合享元
- */
- class CompositeFlyweight extends Flyweight {
- private Map<Character, Flyweight> map;
- public CompositeFlyweight() {
- map = new HashMap<Character, Flyweight>();
- }
- public void add(Character c, Flyweight fly) {
- map.put(c, fly);
- }
- @Override
- public void operation(String extState) {
- Iterator<Map.Entry<Character, Flyweight>> it = map.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry<Character, Flyweight> entry = it.next();
- Flyweight fly = entry.getValue();
- fly.operation(extState);
- }
- }
- }
- /**
- * 享元工廠
- */
- class FlyweightFactory {
- private Map<Character, Flyweight> map;
- public FlyweightFactory() {
- map = new HashMap<Character, Flyweight>();
- }
- /**
- * 單純享元工廠
- */
- public Flyweight factory(Character state) {
- Flyweight flyweight;
- if (map.containsKey(state)) {
- flyweight = map.get(state);
- } else {
- flyweight = new ConcreteFlyweight(state);
- map.put(state, flyweight);
- }
- return flyweight;
- }
- /**
- * 複合享元工廠 此處Character的複合型別恰好是String, 當無此巧合時,可使用List等聚集型別傳入.
- */
- public Flyweight factory(String compositeState) {
- CompositeFlyweight composite = new CompositeFlyweight();
- for (int i = 0; i < compositeState.length(); i++) {
- Character c = new Character(compositeState.charAt(i));
- composite.add(c, this.factory(c));
- }
- return composite;
- }
- /**
- * 輔助方法
- */
- public void checkFlyweight() {
- Iterator<Map.Entry<Character, Flyweight>> it = map.entrySet().iterator();
- System.out.println("checkFlyweight:");
- while (it.hasNext()) {
- Map.Entry<Character, Flyweight> entry = it.next();
- Character key = entry.getKey();
- System.out.println("key:" + key);
- }
- }
-
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2136280/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 六、享元模式模式
- 享元模式初探模式
- 設計模式----享元模式設計模式
- 設計模式-享元模式設計模式
- 享元模式(Flyweight)模式
- 設計模式之享元模式設計模式
- javascript設計模式享元模式JavaScript設計模式
- 設計模式(十七):享元模式設計模式
- Swift 實戰-享元模式Swift模式
- 享元模式 核心程式碼模式
- 物件池與享元模式物件模式
- 實驗13:享元模式模式
- 設計模式系列13–享元模式設計模式
- 【大道模式】享元模式-FlyWeight Pattern模式
- 極簡設計模式-享元模式設計模式
- Python設計模式-享元模式Python設計模式
- Java設計模式11——享元模式Java設計模式
- iOS設計模式 (四)享元模式iOS設計模式
- 軟體設計模式————(享元模式)設計模式
- C#設計模式(13)——享元模式C#設計模式
- Java設計模式之(十一)——享元模式Java設計模式
- 設計模式系列13--享元模式設計模式
- C#設計模式之享元模式C#設計模式
- 通俗 Python 設計模式——享元模式Python設計模式
- 我學設計模式 之 享元模式設計模式
- Java學設計模式之享元模式Java設計模式
- 享元模式(c++實現)模式C++
- c#享元模式詳解C#模式
- Java設計模式(13):享元模式(蠅量模式)Java設計模式
- 《設計模式四》觀察、組合、享元模式設計模式
- 設計模式【10】-- 順便看看享元模式設計模式
- 設計模式 | 享元模式及典型應用設計模式
- 11.java設計模式之享元模式Java設計模式
- 10、Python與設計模式–享元模式Python設計模式
- 12.享元模式設計思想模式
- Java設計模式之七 —– 享元模式和代理模式Java設計模式
- 每天一個設計模式之享元模式設計模式
- 軟體設計模式系列之十三——享元模式設計模式