<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 117  文章 - 72  trackbacks - 0

    聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

    常用鏈接

    常用設置
    常用軟件
    常用命令
     

    訂閱

    訂閱

    留言簿(7)

    隨筆分類(130)

    隨筆檔案(123)

    搜索

    •  

    積分與排名

    • 積分 - 155701
    • 排名 - 391

    最新評論

    [關鍵字]:java,design pattern,設計模式,《Java與模式》學習,Flyweight Pattern,享元模式
    [環境]:StarUML5.0 + JDK6
    [作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
    [正文]:

    享元模式-復合享元:

    package pattern.flyweight.unsharable;
    import java.util.*;

    /**
     * 復合的享元模式:
     * 復合享元是不能共享的,所以叫Unsharable Flyweight。
     * 但是復合享元是可以分解為可共享的單純享元。
     *
     * @version 2009-6-25
     * @author Winty(wintys@gmail.com)
     */
    public class UnsharableFlyweightTest{
        public static void main(String[] args){
            FlyweightFactory f = new FlyweightFactory();
            
            Flyweight fly = f.factory("aba");
            fly.operation("ex");

            f.checkFlyweight();
        }
    }

    /**
     * 抽象享元
     */
    abstract class Flyweight{
        public abstract void operation(String extrinsicState);
    }


    /**
     * 具體享元
     */
    class ConcreteFlyweight extends Flyweight{
        private Character intrinsicState;

        public ConcreteFlyweight(Character intrinsicState){
            this.intrinsicState = intrinsicState;
        }

        /**
         * 外蘊狀態改變方法行為,但不會改變內蘊狀態
         */
        @Override
        public void operation(String extrinsicState){
            String str = "intrinsic:" + intrinsicState;
            str += "   extrinsic:" + extrinsicState;
            System.out.println(str);
        }
    }


    /**
     * 復合享元
     */
    class UnsharableFlyweight extends Flyweight{
        private Map<Character , Flyweight> map;

        public UnsharableFlyweight(){
            map = new HashMap<Character , Flyweight>();
        }

        public void add(Character c , Flyweight fly){
            map.put(c , fly);
        }

        @Override
        public void operation(String extrinsicState){
            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(extrinsicState);
            }
        }
    }


    /**
     * 享元工廠
     */
    class FlyweightFactory{
        private Map<Character , Flyweight> map;

        public FlyweightFactory(){
            map = new HashMap<Character , Flyweight>();
        }

        /**
         * 單純享元工廠
         */
        public Flyweight factory(Character state){
            Flyweight flyweight = null;

            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){
            UnsharableFlyweight composite = new UnsharableFlyweight();
            
            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("check flyweight:");
            while(it.hasNext()){
                Map.Entry<Character , Flyweight> entry = it.next();
                Character key = entry.getKey();
                System.out.println("key:" + key);
            }
        }
    }


    運行結果:
    intrinsic:b   extrinsic:ex
    intrinsic:a   extrinsic:ex
    check flyweight:
    key:b
    key:a
    posted on 2009-06-29 22:58 天堂露珠 閱讀(1156) 評論(0)  編輯  收藏 所屬分類: Pattern
    主站蜘蛛池模板: 国产午夜亚洲精品国产| 精品久久久久久亚洲中文字幕| 国产高清免费视频| 亚洲精品自偷自拍无码| 在线亚洲97se亚洲综合在线| 国产男女猛烈无遮挡免费视频网站| 美女视频黄a视频全免费网站色 | 91制片厂制作传媒免费版樱花| 中文日韩亚洲欧美制服| 亚洲人成网站在线观看播放| 999国内精品永久免费视频| 色吊丝性永久免费看码| 亚洲制服在线观看| 亚洲色一色噜一噜噜噜| 日日躁狠狠躁狠狠爱免费视频 | 久久国产成人精品国产成人亚洲| 999久久久免费精品播放| 亚洲国产成人精品无码区在线观看| 日本成年免费网站| 成人无码WWW免费视频| 亚洲av无码兔费综合| 亚洲电影唐人社一区二区| 精品国产亚洲一区二区在线观看| 在线观看AV片永久免费| a级毛片毛片免费观看久潮| 色婷婷六月亚洲综合香蕉| 亚洲国产一区二区三区青草影视| 99久久精品免费视频| 人妻仑刮八A级毛片免费看| 久久亚洲精品国产亚洲老地址| 亚洲精品无码成人AAA片| 日本特黄特黄刺激大片免费| 1000部拍拍拍18免费网站| 最新亚洲成av人免费看| 日本亚洲高清乱码中文在线观看| 亚洲人成电影在线观看青青| 亚洲AV无码久久精品蜜桃| 4338×亚洲全国最大色成网站| 黄a大片av永久免费| 一二三四免费观看在线电影 | 久久久久高潮毛片免费全部播放 |