亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java模式開發之責任鏈模式(下)

2019-11-18 12:16:51
字體:
來源:轉載
供稿:網友

  對象的樹結構
  在面向對象的技術里,對象的樹結構是一個強有力的工具,更是模式理論的一個重要的組成部分,需要應用到符合模式、裝飾模式和迭代子模式。
  《墨子.天志》說:“庶人竭力從事,未得次己而為政,有士政之,士竭力從事,未得次己而為政,有將軍、大夫政之;將軍、大夫竭力從事,未得次己而為政,有三公、諸侯政之;三公、諸侯竭力聽治,未得次己而為政,有天子政之;天子未得次己而為政,有天政之?!?br />  “次”意為恣意。上面的話就是說,百姓有官吏管治,官吏由將軍和士大夫管治,將軍和士大夫由三公和諸侯管治,三公和諸侯由天子管治,天子由天管治。
   Java模式開發之責任鏈模式(下)(圖一)


  圖11、墨子論責任和責任鏈的傳播。圖中有陰影的對象給出了一個可能的責任鏈選擇。
  當一個百姓提出要求時,此要求會傳達到“士”一級,再到“大夫”一級,進而傳到“諸侯”一級,“天子”一級,最后到“天”一級。
  DHTML中的事件處理
  瀏覽器的DOM(Document Object Model)模型中的事件處理均采用責任鏈模式。本節首先考察Netscape瀏覽器的DHTML的事件處理,然后再研究Internet EXPlorer的事件模型。
  Netscape的事件模型
  Netscape的事件處理機制叫做“事件捕捉”(Event Capturing)。在事件捕捉機制里面,一個事件是從DOM的最高一層向下傳播,也就是說,window對象是第一個接到事件的,然后是document對象,如此往下---事件的產生對象反而是最后一個接到事件的。
  假如要是一個對象捕捉某一個事件,只需要調用captureEvent()方法;假如要使一個對象把某一個事件向下傳而不處理此事件,只需要對此對象使用releaseEvents方法即可。下面考察一個簡單的事件捕捉和傳遞的例子。
   Java模式開發之責任鏈模式(下)(圖二)
  圖12、一個Netscape的例子。
  在這個例子里,有一個textbox和兩個button,一個叫做“Capture Event”,單擊后會使網頁的click事件被捕捉,文字框中的計數會加一;另一個叫做“Release Event”,單擊后會使網頁的click事件不被捕捉。
  使click事件被捕捉需要調用captureEvent()方法,而使click事件不被捕捉需要調用releaseEvent()方法。下面是具體的html和javascript代碼。
   Java模式開發之責任鏈模式(下)(圖三)
  代碼清單6、Javascript和HTML源代碼。
  顯然,一個事件可以在幾個不同的等級上得到處理,這是一個不純的責任鏈模式。
  Internet Explorer的事件模型
  Internet Explorer處理事件的方式與Netscape既相似又不同。當一個事件發生在Internet Explorer所瀏覽的網頁中時,Internet Explorer會使用DHTML的“Event Bubbling”即事件浮升機制處理此事件。Internet Explorer的DOM模型是html對象等級結構和事件處理機制。在DOM里面,每一個html標示都是一個DOM對象,而每一個DOM對象都可以產生事先定義好的幾個事件中的一個(或幾個)。這樣的一個事件會首先發生在事件所屬的對象上,然后向上傳播,傳到此對象所屬的容器對象上,如此等等。因此,事件浮升機制恰恰是事件捕捉機制的相反面。
  在Event Bubbling機制里面,產生事件的對象首先會收到事件。然后,事件會依照對象的等級結構向上傳播。比如一個DIV里有一個Form,Form里面又有一個Button,那么當Button的onclick事件產生時,Form的onclick事件代碼就會被執行。然后,事件就會傳到DIV對象。假如DIV對象的onclick事件有任何代碼的話,這代碼就會被執行,然后事件繼續沿著DOM結構上行。
  假如要阻止事件繼續向上傳播,可以在事件鏈的任何一個節點上把cancelBubble性質設置成True即可。
  Internet Explorer 瀏覽器幾乎為所有的 HTML 標識符都提供了事件句柄,因此Internet Explorer不需要captureEvents()方法和releaseEvents()方法來捕捉和釋放事件。下面的JavaScript語句指定了document對象的onclick事件的處理方法:
  document.onclick = functionName; 
  而下面的語句則停止了document對象對onclick事件的處理。
  document.onclick = null; 
  因為事件處理性質被賦值null,document便沒有任何的方法處理此事件。換言之,null值禁止了此對象的事件處理。這種方法可以用到任何的對象和任何的事件上面。當然這一做法不適用于Netscape。
  與Netscape中一樣,一個事件處理方法可以返還Boolean值。比如,單擊一個超鏈接標記符是否造成瀏覽器跟進,取決于此超鏈接標記符的onclick事件是否返還true。
  為了顯示Internet Explorer中的事件浮升機制,本節特預備了下面的例子。一個Form里面有一個Button,請見下圖:
   Java模式開發之責任鏈模式(下)(圖四)
  圖13、一個Internet Explorer的例子。
  其HTML代碼請見下面:
   Java模式開發之責任鏈模式(下)(圖五)
  代碼清單7、JavaScript和HTML源代碼。
  當myButton的onclick事件發生時,myButton的事件處理首先被激發,從而顯示出如下的對話窗
   Java模式開發之責任鏈模式(下)(圖六)
  圖14、myButton對象的事件處理被激發。
  然后事件會象氣泡一樣浮升到上一級的對象,即myForm對象上。myForm對象的事件處理給出下面的對話窗:
   Java模式開發之責任鏈模式(下)(圖七)
  圖15、myFormn對象的事件處理被激發。
  這以后事件繼續浮升到更上一級的對象,即body上。這時,document對象的事件處理被激發,并給出下面的對象窗:
   Java模式開發之責任鏈模式(下)(圖八)
  圖16、document對象的事件處理被激發。
  這就是事件浮升(Event Bubbling)機制。
  顯然,這三級對象組成一個責任鏈,而事件便是命令或請求。當事件沿著責任鏈傳播時,責任鏈上的對象可以選擇處理或不處理此事件;不論事件在某一個等級上是否得到處理,事件都可以停止上浮或繼續上浮。這是不純的責任鏈模式。
  責任鏈模式與其它模式的關系
  責任鏈模式與以下的設計模式相關:
  復合模式(Composite Pattern) 當責任鏈模式中的對象鏈屬于一個較大的結構時,這個較大的結構可能符合復合模式。
  命令模式(Command Pattern) 責任鏈模式使一個特定的請求接收對象對請求或命令的執行變得不確定。而命令模式使得一個特定的對象對一個命令的執行變得明顯和確定。
  模版方法模式(Template Method) 當組成責任鏈的處理者對象是按照復合模式組成一個較大的結構的責成部分的話,模版方法模式經常用來組織單個的對象的行為。
  問答題
  第一題、在稱為“拱豬”的紙牌游戲中,四個參加者中由“豬”牌的,可以選擇一個時機放出這張“豬”牌。“豬”牌放出后,四個人中的一個會不可避免地拿到這張“豬”牌。
  請使用責任鏈模式說明這一游戲,并給出UML結構圖。
  第二題、《墨子.迎敵祠》里描守城軍隊的結構:“城上步一甲、一戟,其贊三人。五步有伍長,十步有什長,百步有佰長,旁有大帥,中有大將,皆有司吏卒長。”
  一個兵勇需要上級批準以便執行一項任務,他要向伍長請求批準。伍長假如有足夠的權限,便會批準或駁回請求;假如他沒有足夠的權限,便會向上級,即什長轉達這個請求。什長便會重復同樣的過程,直到大將那里。一個請求最終會被批準或駁回,然后就會象下傳,直到傳回到發出請求的士兵手里。
  有些請求會很快返回,有些則要經過較長的過程。請求到底由誰批準,事前并不知道。請求的處理者并不是固定的,有些軍官會晉升,轉業,或從別的單位轉過來,等等。
  請使用責任鏈模式解釋這個核準請求的結構。
 ?。ū纠邮艿轿墨I[ALPERT98]里“Chain of Responsibility”一節所給出的一個例子的啟發。)
  第三題、王羲之在《蘭亭序》中寫道:“有清流激湍,映帶左右,引以為流觴曲水,列坐其次?!敝v的是大伙列坐水畔,隨水流放下帶羽毛的酒杯飲酒。遠道而來的酒杯流到誰的面前,誰就取而飲之。
  在這個活動中,參加者做成一排,面對著一條彎曲的小溪。侍者把酒杯盛滿酒,讓酒杯沿著小溪向下漂流。酒杯漂到一個參加者面前的時候,他可以選擇取酒飲之,也可以選擇讓酒杯漂向下家。
  假設每一杯酒最終都會被參加者中之一喝掉,那么這個游戲是不是純的責任鏈模式?
  問答題答案
  第一題答案、這是一個純的責任鏈模式。
  首先,在“豬”牌放出之后,每個人都只能要么躲過“豬”牌,要么吃住“豬”牌?!柏i”牌便是責任鏈模式中的請求,四個人便是四個處理者對象,組成責任鏈。
  每一個參加者的行為不僅僅取決于他手中的牌,而且取決于他是否想得“豬”牌。一個想收全紅的人,可能會權力攬“豬”牌,一個不想收全紅的人,一般不想收“豬”牌,除非他想阻止別人收“豬”牌。因為一旦有人收全紅,另外三個人就會復出較大的代價,因此阻止別人收全紅的動機,會促使一個參與者主動收“豬”牌。有的時候,放出“豬”牌的人也會想要得“豬”牌而得不到,有的時候放出“豬”牌的人想要害人但卻害了自己。
  這就是說,到底是四個人中的哪一個人得到“豬”牌是完全動態決定的。
  系統的UML結構圖如下:
   Java模式開發之責任鏈模式(下)(圖九)
  圖18、紙牌游戲“拱豬”的UML類圖。
  由于玩牌的時候,可能有四人位置的任意調換,或者有候補者在旁等待,一旦在任的玩家被淘汰,便可上任。這樣四個人組成的牌局是動態變化的。同時因為誰會拿到“豬”牌在每一局均會不同,因此誰會放出“豬”牌也是動態的。
  因此,責任鏈的組成和順序變不是一成不變的,而是動態的和變化的。
  第二題答案、墨子的守城部隊的等級結構可以用下面的對象圖表示

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一级黄色片| 国产成人一区二区三区小说| 97久久精品在线| 中文字幕日韩电影| 狠狠久久五月精品中文字幕| 97超碰国产精品女人人人爽| 日韩欧美大尺度| 欧美专区在线视频| 亚洲国产成人91精品| 国产精品一区久久久| 狠狠干狠狠久久| 久久久精品2019中文字幕神马| 亚洲国产另类久久精品| 大荫蒂欧美视频另类xxxx| 欧美激情精品久久久久久大尺度| 欧美做爰性生交视频| 成人黄色在线播放| 岛国精品视频在线播放| 久久影院中文字幕| 久久久亚洲成人| 亚洲v日韩v综合v精品v| 欧美成人免费播放| 成人福利视频网| 日韩欧美国产一区二区| 久久精品久久久久| 日本久久久久久久久久久| www高清在线视频日韩欧美| 欧美丝袜一区二区三区| 亚洲精品国产福利| 久久综合88中文色鬼| 日韩欧美亚洲范冰冰与中字| 91高清视频在线免费观看| 91av视频在线免费观看| 日韩亚洲国产中文字幕| 精品久久久久久电影| 欧美日韩国产二区| 亚洲第一精品自拍| 日韩成人中文电影| 久久久久久69| 日韩av在线免费播放| 欧美午夜激情小视频| 国产有码在线一区二区视频| 夜夜嗨av一区二区三区免费区| 久久免费视频网| 成人妇女淫片aaaa视频| 亚洲国产精品久久精品怡红院| 日本a级片电影一区二区| 不卡av电影院| 亚洲视频在线观看网站| 久久成人免费视频| 国产精品嫩草视频| 久久久国产91| 性色av一区二区三区在线观看| 在线丨暗呦小u女国产精品| 久久伊人精品天天| 亚洲第一色中文字幕| 91免费人成网站在线观看18| 亚洲国产精品大全| 欧美中文在线观看| 欧美精品电影免费在线观看| 久久精品免费播放| 久久免费国产精品1| 91中文精品字幕在线视频| 欧美大尺度激情区在线播放| 欧美高清自拍一区| 欧美裸体xxxx极品少妇软件| 久久久久成人精品| 精品成人69xx.xyz| 欧美小视频在线| 亚洲第一精品夜夜躁人人躁| 91精品国产综合久久香蕉922| 久久精品国产电影| 欧美亚洲午夜视频在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 成人黄色av免费在线观看| 亚洲自拍小视频免费观看| 久久精品国产精品| 日韩电影中文字幕| 日本精品在线视频| 中文字幕亚洲综合久久筱田步美| 亚洲v日韩v综合v精品v| 国产精品亚洲网站| 都市激情亚洲色图| 中文字幕在线国产精品| 亚洲视频电影图片偷拍一区| 亚洲成人久久久久| 亚洲美女久久久| 亚洲欧美日韩国产中文专区| 富二代精品短视频| 亚洲美女黄色片| 欧美精品18videos性欧| 国产精品久久久久久久久借妻| 国产日韩在线一区| 亚洲视频一区二区三区| 欧美亚洲国产视频小说| 久久久免费在线观看| 亚洲第一级黄色片| 色偷偷av一区二区三区乱| 中文字幕日韩av电影| 久久精品视频亚洲| 亚洲韩国青草视频| 欧洲精品毛片网站| 国产精品国产福利国产秒拍| 中文字幕日韩电影| 久久精品国产一区二区三区| 国产成人一区二区三区| 色综合天天综合网国产成人网| 欧日韩不卡在线视频| 精品调教chinesegay| 欧美日本在线视频中文字字幕| 久久成人在线视频| 日韩美女中文字幕| 亚洲97在线观看| 成人自拍性视频| 国产精品色视频| 91视频88av| 成人免费视频a| 性欧美亚洲xxxx乳在线观看| 久久久亚洲国产天美传媒修理工| 欧美一级免费视频| 国产精品www网站| 精品露脸国产偷人在视频| 中文字幕欧美日韩va免费视频| 青青在线视频一区二区三区| 精品久久久av| 国产免费观看久久黄| 欧美老女人性生活| 久久天天躁狠狠躁夜夜躁| 欧美日韩国产精品一区二区不卡中文| 国产精品扒开腿做爽爽爽视频| 精品国产成人av| 欧美在线免费视频| 91高清视频在线免费观看| 日韩av在线看| 国产午夜精品久久久| 操日韩av在线电影| 欧美亚洲激情视频| 亚洲精品自拍第一页| 国产久一一精品| 91麻豆国产语对白在线观看| 5566日本婷婷色中文字幕97| 这里只有精品在线观看| 久久精品亚洲国产| 国产精品高潮呻吟久久av黑人| 欧美精品在线观看| 欧美高跟鞋交xxxxxhd| 国产精品一二区| 日韩在线免费视频| 欧美亚洲成人精品| 精品无人区乱码1区2区3区在线| 日韩a**站在线观看| 亚洲自拍偷拍在线| 亚洲经典中文字幕| 青青青国产精品一区二区| 一区二区三区亚洲| 国产精品美女在线| 俺去亚洲欧洲欧美日韩| 日韩欧美综合在线视频| 91久久国产综合久久91精品网站| 欧美成人国产va精品日本一级| 国产精品亚洲一区二区三区| 亚洲精品网站在线播放gif| 亚洲97在线观看| 久久精品视频播放|