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

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

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

    夢幻之旅

    DEBUG - 天道酬勤

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
    任鏈模式
        在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端并不知道鏈上的哪一個對象最終處理這個請求,這使系統可以在不影響客戶端的情況下動態的重新組織鏈和分配責任。
    責任鏈模式的組成部份
        1.抽象處理者 定義出一個處理請求的接口。如果需要,接口可以定義出一個方法,以設定和返回下家的引用。這個角色通常由一個Java抽象類或Java接口實現。
        2.具體處理 具體處理者接到請求后,可以選擇將請求處理掉,或者將請求傳給下家。由于處理者持有下家引用,因此,如果需要,具體處理者可以訪問下家。
    責任鏈模式組成部份之間的關系

    一個例子:
    1.抽象處理者
    package responsibility;

    public abstract class Handler
    {
        
    protected Handler nextHandler;
        
        
    public abstract void handleRequest(String name);
        
        
    public void setNextHandler(Handler handler)
        
    {
            
    this.nextHandler = handler;
        }

    }

    2.寶玉
    package responsibility;

    /**
     * <ul>
     * <li>Title:[JiaBaoYu]</li>
     * <li>Description: [賈寶玉]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-7-31]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
    @version 1.0  
     
    */

    public class JiaBaoYu extends Handler
    {
        
    public void handleRequest(String name)
        
    {
            
    if("賈寶玉".equals(name))
            
    {
                System.out.println(
    "賈寶玉表演節目");
            }

            
    else
            
    {
                System.out.println(
    "賈寶玉傳把花遞給下一位");
                
    if (nextHandler != null)
                
    {
                    
    this.nextHandler.handleRequest(name);
                }

            }

        }

    }

    林黛玉:
    package responsibility;

    /**
     * <ul>
     * <li>Title:[LinDaiYu]</li>
     * <li>Description: [林戴玉]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-7-31]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
    @version 1.0  
     
    */

    public class LinDaiYu  extends Handler
    {   
        
    public void handleRequest(String name)
        
    {
            
    if("林戴玉".equals(name))
            
    {
                System.out.println(
    "林戴玉表演節目");
            }

            
    else
            
    {
                System.out.println(
    "林戴玉把花傳遞給下一位");
                
    if (nextHandler != null)
                
    {
                    
    this.nextHandler.handleRequest(name);
                }

            }

        }

    }

    探春:
    package responsibility;

    /**
     * <ul>
     * <li>Title:[TanChun]</li>
     * <li>Description: [探春]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-7-31]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
     * 
    @version 1.0
     
    */

    public class TanChun extends Handler
    {
        
    public void handleRequest(String name)
        
    {
            
    if ("探春".equals(name))
            
    {
                System.out.println(
    "探春表演節目");
            }

            
    else
            
    {
                System.out.println(
    "探春把花傳遞給下一位");
                
    if (nextHandler != null)
                
    {
                    nextHandler.handleRequest(name);
                }

            }

        }

    }

    襲人:
    package responsibility;

    /**
     * <ul>
     * <li>Title:[XiRen]</li>
     * <li>Description: [襲人]</li>
     * <li>Copyright 2009 Upengs Co., Ltd.</li>
     * <li>All right reserved.</li>
     * <li>Created by [Huyvanpull] [2011-7-31]</li>
     * <li>Midified by [modifier] [modified time]</li>
     * </ul>
     * 
    @version 1.0  
     
    */

    public class XiRen extends Handler
    {   
        
    public void handleRequest(String name)
        
    {
            
    if("襲人".equals(name))
            
    {
                System.out.println(
    "襲人表演節目");
            }

            
    else
            
    {
                System.out.println(
    "襲人把花傳遞給下一位");
                
    if (nextHandler != null)
                
    {
                    
    this.nextHandler.handleRequest(name);
                }

            }

        }

    }



    環境:
    package responsibility;

    public class Client
    {
        
    public static void main(String[] args)
        
    {
            
    // 賈寶玉
            Handler jiabaoyu = new JiaBaoYu();
            
    // 林黛玉
            Handler lindaiyu = new LinDaiYu();
            
    // 襲人
            Handler xiren = new XiRen();
            
    // 探春
            Handler tanchun = new TanChun();
            
            jiabaoyu.setNextHandler(lindaiyu);
            lindaiyu.setNextHandler(xiren);
            xiren.setNextHandler(tanchun);
            
            jiabaoyu.handleRequest(
    "賈寶玉");
        }

    }



    純的與不純的責任鏈
    在一個純的責任鏈模式里面,一個請求必須被某一個處理者對象所接收;在一個不純的責任鏈模式里面,一個請求可以最終不被任何接收端對象所接收。

    責任鏈模式的優點

           責任鏈模式非常顯著的優點是請求和處理分開。請求者可以不用知道是誰處理的,處理者可以不用知道請求的全貌(例如在J2EE項目開發中,可以剝離出無狀態Bean由責任鏈處理),兩者解耦,提高系統的靈活性。

    責任鏈模式的缺點

           責任鏈有兩個非常顯著的缺點:一是性能問題,每個請求都是從鏈頭遍歷到鏈尾,特別是在鏈比較長的時候,性能是一個非常大的問題。二是調試不是很方便,特別是鏈條比較長,環節比較多的時候,由于采用了類似遞歸的方式,調試的時候邏輯可能比較復雜。



    posted on 2011-08-01 00:04 HUIKK 閱讀(373) 評論(0)  編輯  收藏 所屬分類: Design Patterns
    主站蜘蛛池模板: 夫妻免费无码V看片| 亚洲嫩模在线观看| 爱丫爱丫影院在线观看免费| 亚洲影院在线观看| 精品免费国产一区二区| 97无码人妻福利免费公开在线视频| 91情国产l精品国产亚洲区| 国产成人综合久久精品免费| 在线观看特色大片免费网站| 亚洲人成人无码.www石榴| 国产亚洲自拍一区| 成年女人午夜毛片免费看| 成人黄网站片免费视频| 99999久久久久久亚洲| 亚洲精品无码国产| 国产高清在线免费视频| 91香蕉国产线观看免费全集| 国产亚洲综合精品一区二区三区| 亚洲激情在线视频| 亚洲精品专区在线观看| 操美女视频免费网站| 在线涩涩免费观看国产精品| 精品国产_亚洲人成在线| 亚洲福利视频一区二区三区| 亚洲中文字幕无码爆乳av中文| 一个人免费高清在线观看| 精品国产一区二区三区免费| 视频一区在线免费观看| 亚洲国产精品成人精品小说| 亚洲综合网站色欲色欲| 尤物永久免费AV无码网站| av无码久久久久不卡免费网站| 中文字幕免费在线视频| 理论片在线观看免费| 亚洲午夜福利在线视频| 亚洲第一永久在线观看| 亚洲v高清理论电影| 丝袜熟女国偷自产中文字幕亚洲| 日本特黄a级高清免费大片| 日韩精品福利片午夜免费观着 | 美女内射无套日韩免费播放|