青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

兔子的技術博客

兔子

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新評論

閱讀排行榜

評論排行榜

轉自:http://dev.yesky.com/387/2012387.shtml

  根據Linda Rising的《Pattern Almanac》一書,已知的架構模式有七十多種。這是一個只多不少的統計,其中包括了很多通常認為是設計模式的模式,比如Bridge,Facade,Interpreter,Mediator等模式通常認為是設計模式,但是在許多情況下,也可以作為架構模式出現,因此也常常被當作架構模式。

  Layers架構模式

  在收集到用戶對軟件的要求之后,架構設計就開始了。架構設計一個主要的目的,就是把系統劃分成為很多"板塊"。劃分的方式通常有兩種,一種是橫向的劃分,一種是縱向劃分。

  橫向劃分將系統按照商業目的劃分。比如一個書店的管理系統可以劃分成為進貨、銷售、庫存管理、員工管理等等。

  縱向劃分則不同,它按照抽象層次的高低,將系統劃分成"層",或叫Layer。比如一個公司的內網管理系統通??梢詣澐殖蔀橄旅娴膸讉€Layer:

  一、網頁,也就是用戶界面,負責顯示數據、接受用戶輸入;

  二、領域層,包括JavaBean或者COM對象、B2B服務等,封裝了必要的商業邏輯,負責根據商業邏輯決定顯示什么數據、以及如何根據用戶輸入的數據進行計算;

  三、數據庫,負責存儲數據,按照查詢要求提供所存儲的數據。

  四、操作系統層,比如Windows NT或者Solaris等

  五、硬件層,比如SUN E450服務器等

  有人把這種Layer叫做Tier,但是Tier多帶有物理含義,不同的Tier往往位于不同的計算機上,由網絡連接起來,而Layer是純粹邏輯的概念,與物理劃分無關。

  Layers架構模式的好處是:

  第一、任何一層的變化都可以很好地局限于這一層,而不會影響到其他各層。

  第二、更容易容納新的技術和變化。Layers架構模式容許任何一層變更所使用的技術

  Fa?ade架構模式

  外部與一個子系統的通訊必須通過一個統一的門面(Facade)對象進行,這就是Facade模式。

  現代的軟件系統都是比較復雜的,設計模式的任務就是協助設計師處理復雜系統的設計。

  設計師處理復雜系統的一個常見方法便是將其"分而治之",把一個系統劃分為幾個較小的子系統。但是這樣做了以后,設計師往往仍然會發現一個子系統內仍然有太多的類型要處理。而使用一個子系統的使用端往往只關注一些特定的功能,卻要同時與子系統內部的許多對象打交道后才能達到目的,請見下面的對象圖。


圖4、Facade架構模式的結構圖。

  這就是一種不便,它使得系統的邏輯變得不必要的復雜,維護成本提高,復用率降低。

  用一個范例說明,中國大陸醫院便是一個子系統,按照部門職能,這個系統可以劃分為掛號、門診、劃價、化驗、收銀、取藥等。看病的病人要與這些部門打交道,就如同一個子系統的使用端與一個子系統的各個類型打交道一樣,不是一件容易的事情。

  首先病人必須先掛號,然后門診。如果醫生要求化驗,病人必須首先劃價,然后繳款,才能到化驗部門做化驗。化驗后,再回到門診室,請見下面的對象圖。


圖5、描述病人在醫院里的體驗。圖中的方框代表醫院。

  解決這種不便的方法便是引進Facade模式。仍然通過醫院的范例說明,可以設置一個接待員的位置,由接待員負責代為掛號、劃價、繳費、取藥等。這個接待員就是Facade模式的體現,病人只接觸接待員,由接待員負責與醫院的各個部門打交道,請見下面的對象圖。


圖6、描述經過Facade模式的改裝后,病人在醫院里的體驗。圖中的方框代表醫院。

  Facade模式要求一個子系統的外部與其內部的通訊必須通過一個統一的門面(Facade)對象進行。Facade模式提供一個高等級的接口,使得子系統更易于使用。

  使用了Facade模式之后,本章的第一個圖中所描述的一個子系統的使用端對象所面對的復雜關系就可以簡化為下面這個樣子。


圖7、Facade架構模式的結構圖

  描述經過Facade模式的改裝后,一個子系統的使用端與子系統的關系。圖中的大方框代表一個子系統。

  就如同醫院的接待員一樣,Facade模式的門面類型將使用端與子系統的內部復雜性分隔開,使得使用端只需要與門面對象打交道,而不需要與子系統內部的很多對象打交道。

  Mediator架構模式

  Mediator模式包裝了一系列對象相互作用的方式,使得這些對象不必互相明顯參照;從而使它們可以較松散地耦合。當這些對象中的某些對象之間的相互作用發生改變時,不會立即影響到其它的一些對象之間的相互作用;從而可以保證這些相互作用可以彼此獨立地變化。

  在下面的示意圖中有大量的對象,這些對象既會影響別的對象,又會被別的對象所影響,因此常常叫做同事(Colleague)對象。這些同事對象通過彼此的相互作用形成系統的行為。從圖中可以看出,幾乎每一個對象都需要與其它的對象發生相互作用,而這種相互作用表現為一個對象與另一個對象的直接耦合。


圖8、這是一個過度耦合的系統

  通過引入調停者對象(Mediator),可以將系統的網狀結構變成以中介者為中心的星形結構,如下圖所示。在這個星形結構中,同事對象不再通過直接的聯系與另一個對象發生相互作用;相反地,它通過調停者對象與另一個對象發生相互作用。調停者對象的存在保證了對象結構上的穩定,也就是說,系統的結構不會因為新對象的引入造成大量的修改工作。


圖9、這是一個使用了Mediator架構模式之后的結構圖

  比較傳統的設計方法,面向對象的技術可以更好地協助設計師管理更為復雜的系統。一個好的面向對象的設計可以使對象之間增加協作性(Collaboration),減少耦合度(Coupling)。一個深思熟慮的設計會把一個系統分解為一群相互協作的同事對象,然后給每一個同事對象以獨特的責任,恰當的配置它們之間的協作關系,使它們可以在一起工作。

  在Mediator模式中,所有的成員對象都可以協調工作,但是又不直接相互管理。這些對象都與一個處于中心地位的調停者對象發生緊密的關系,由這個調停者對象進行協調工作。這個協調者對象叫做調停者(Mediator),而調停者所協調的成員對象稱做同事(Colleague)對象。

  在Colleague對象內部發生的事件會影響到所有的同事,但是這種影響不是以直接管理的方式直接傳到其它的對象上的。記住在小組的成員增加時,這樣的相互作用關系是以比指數更快的方式增加的。相反,這種影響僅僅直接影響到調停者對象,而調停者對象反過來會協調其它的同事,形成整個系統的行為。

  如果小組的成員增加時,調停者對象可能會面臨修改,而其它的同事則可以裝做不知道這個新的成員一樣,不必修改。反過來,如果小組的成員之一被從系統中刪除的話,調停者對象需要對此做出修改,而小組中其它的同事則不必改動。

  Interpreter架構模式

  給定一個語言之后,Interpreter模式可以定義出其文法的一種表示,并同時提供一個直譯器;使用端可以使用這個直譯器來解釋這個語言中的句子。

  如果某一類型問題一再地發生的話,那么一個有意義的做法就是將此類型問題的各個實例表達為一個簡單語言中的語句。這樣就可以建造一個直譯器,通過解釋這些語句達到解決問題的目的。

  例如,依照一個匹配模式搜尋字符串便是一個常見的問題。與其為每一個匹配模式建造一個特定的算法,不如建造一個一般性的算法處理各種常規表達式。當接到一個指定的常規表達式時,系統使用一個直譯器解釋這個常規表達式,從而對字符串進行匹配。

  再比如VBA(Visual Basic for Applications)就不僅僅出現在微軟的Office系列軟件中,并且可以供第三廠家出產的軟件嵌入使用;Crystal Reports報表生成軟件也包括了一個便于使用的宏語言,使用戶可以執行較為復雜的命令操作。一般而言,將VBA或者其它的語言軟件嵌入到自己的軟件產品中,可以使產品定制化(Customization)能力大大增強,但是這些宏語言引擎往往都很昂貴。

  現在要介紹的Interpreter模式將描述怎樣在有了一個簡單的文法后,使用模式設計解釋這些語句。熟悉了這個模式以后,一個沒有接收過形式語言和編譯器的正規訓練的設計師也可以自行設計一個簡單的直譯器,以便為使用端提供一個簡單語言,或者在系統內部使用一個簡單語言描述一個合適的問題。

  語言、直譯器和剖析器

  Interpreter模式只描述直譯器是怎樣工作的,并不指明怎樣在執行時創建新的直譯器。雖然廣義地講直譯器不一定要有一個剖析器(Parser),但是使用剖析器仍然是最常見的建立直譯器的辦法。一個剖析器可以從一個檔或命令行讀入文字性命令,并創建直譯器。
剖析器是一種能夠識別文字并將文字按照一定規則進行分解以便進一步處理的對象。剖析器能夠識別的字符串叫做語言。通常建立的小型計算機語言是與環境無關的語言,也就是遵循一定的文法的文字模式,所謂文法,便是決定怎樣將語言的元素組合起來的規則的集合。剖析器便是根據組合規則將字符串分解的。

  抽象地講,語言并不一定是以字符串的形式表達的。在Interpreter模式里面所提到的語言是指任何直譯器對象能夠解釋的任何組合。在Interpreter模式中,需要定義一個代表文法的命令類型的等級結構,也就是一系列的組合規則;每一個命令對象都有一個解釋方法,代表對命令對象的解釋。

  命令對象的等級結構中的對象的任何排列組合都是一個語言,而剖析器的工作便是將一個文字性語言翻譯成為等效的直譯器語言。因此,直譯器往往需要剖析器。

  認識Jack嗎

  剖析器生成器(Parser Generator),常常稱為編譯器的編譯器(Compiler Complier)。Sun Microsystem提供一個專為Java程序員發明的強大的剖析器生成器,最初叫做Jack,后來改名為JavaCC。

  要使用JavaCC,必須使用它提供的腳本語言編寫一個腳本,然后執行JavaCC生成Java源代碼。這生成的源代碼就是所需的剖析器?,F在Sun已經不再負責JavaCC的研發,對JavaCC感興趣的讀者可以從http://www.experimentalstuff.com/Technologies/JavaCC得到免費的JavaCC和相關數據。

  JavaCC最早命名為Jack是為了與一個早就廣泛使用的剖析器生成器YACC諧音。如果讀者已經熟悉了YACC,可以使用YACC達到同樣的目的;只是相比之下JavaCC更容易得到Java程序員的喜愛。

posted on 2010-01-05 10:46 會飛的兔子 閱讀(677) 評論(0)  編輯 收藏 引用 所屬分類: 開發過程管理非C++技術資料
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区激情| 欧美黑人一区二区三区| 国产伦理精品不卡| 亚洲国产老妈| 亚洲免费中文| 亚洲精品1区| 亚洲欧美日韩天堂| 亚洲日本视频| 久久不射2019中文字幕| 亚洲男人第一网站| 在线观看欧美日本| 一本在线高清不卡dvd| 国产欧美一区在线| 亚洲精品偷拍| 欧美成人精品一区二区| 亚洲一区二区欧美日韩| 欧美在线亚洲综合一区| 亚洲第一福利视频| 欧美激情日韩| 国产精品久久看| 欧美黄色免费| 国产一区二区三区四区hd| 久久亚洲国产精品日日av夜夜| 午夜精品999| 免费精品视频| 国产精品揄拍500视频| 亚洲成人资源网| 欧美涩涩视频| 亚洲人成亚洲人成在线观看| 国产精品一区二区三区观看| 免费观看成人www动漫视频| 欧美日韩在线观看视频| 亚洲第一网站| 怡红院精品视频| 午夜精品久久久久久久99热浪潮| 免费看的黄色欧美网站| 国产精品日韩一区二区三区| 一区二区三区.www| 欧美成人免费大片| 欧美成人蜜桃| 亚洲日本电影在线| 美女日韩欧美| 欧美二区在线| 91久久精品美女| 久久久五月天| 国产一区视频网站| 欧美高清视频在线播放| 欧美韩国在线| 久久福利视频导航| 国产美女精品一区二区三区| 欧美日韩国产精品一区| 欧美一级艳片视频免费观看| 国产精品入口日韩视频大尺度| 久久精品国产一区二区电影 | 国产精品国产精品| 国内精品福利| 亚洲裸体俱乐部裸体舞表演av| 欧美激情一级片一区二区| 欧美大片18| 久久国产主播精品| 欧美日韩伦理在线免费| 久久深夜福利| 欧美亚洲一区| 亚洲理论电影网| 久久精品一区二区三区不卡牛牛 | 亚洲美女网站| 国产精品黄色| 亚洲经典三级| 久久精品视频亚洲| 亚洲制服少妇| 欧美色播在线播放| 国产美女精品视频| 一区二区三区四区在线| 亚洲欧美日韩精品综合在线观看| 欧美激情视频在线播放 | 国产一区二三区| av成人国产| 亚洲欧美国产日韩天堂区| 国产精品福利网| 亚洲综合色在线| 老司机精品视频网站| 黄色成人av网站| 欧美在线视频在线播放完整版免费观看| 国产精品久久久久999| 国产亚洲一本大道中文在线| 午夜精品久久久久久99热| 欧美一区亚洲二区| 亚洲手机成人高清视频| 午夜欧美电影在线观看| 亚洲欧美在线一区二区| 伊人久久大香线蕉综合热线 | 国产精品一区一区| 欧美一级视频免费在线观看| 亚洲高清视频的网址| 欧美日韩国产精品一卡| 久久久久久亚洲综合影院红桃| 一本色道久久加勒比88综合| 国产一区二区三区在线观看免费视频| 美女91精品| 午夜亚洲影视| 午夜性色一区二区三区免费视频| 欧美高清视频一区二区三区在线观看| 午夜在线视频一区二区区别| 国产日韩欧美夫妻视频在线观看| 午夜一区在线| 国产精品亚洲片夜色在线| 欧美一区二区在线免费观看| 91久久精品日日躁夜夜躁欧美 | 葵司免费一区二区三区四区五区| 一区二区在线视频观看| 国产精品人人爽人人做我的可爱 | 欧美一级播放| 欧美电影免费观看高清| 国产女人水真多18毛片18精品视频| 欧美成人精品在线播放| 欧美在线三级| 亚洲欧美视频在线观看视频| 午夜欧美理论片| 欧美在线视频免费| 亚洲欧美日韩第一区 | 国产欧美 在线欧美| 欧美成人精品高清在线播放| 久久免费视频一区| 麻豆精品91| 欧美高清在线一区| 一本久道久久久| 欧美亚洲一区二区在线| 国产一区高清视频| 国产日韩欧美视频在线| 国产九色精品成人porny| 国产真实乱偷精品视频免| 亚洲国产岛国毛片在线| 美女久久一区| 欧美大片在线看| 国产精品日韩精品欧美精品| 国产日韩欧美中文| 亚洲欧洲精品一区二区三区波多野1战4| 久久琪琪电影院| 欧美亚洲不卡| 91久久线看在观草草青青| 欧美日韩三区| 国产午夜久久久久| 99亚洲一区二区| 国产一区二区av| 一本一本a久久| 99re这里只有精品6| 狂野欧美一区| 欧美一区二区成人| 欧美日韩国产在线播放| 久久亚洲精品欧美| 亚洲桃色在线一区| 免费成人高清视频| 亚洲成色999久久网站| 欧美在线不卡视频| 亚洲一区二区三区免费视频| 夜夜夜久久久| 一区二区三区四区蜜桃| 欧美激情中文字幕在线| 亚洲人成网站999久久久综合| 亚洲国产精品电影| 欧美在线观看一二区| 99视频在线观看一区三区| 欧美—级a级欧美特级ar全黄| 久久嫩草精品久久久久| 国产乱肥老妇国产一区二 | 欧美一级大片在线观看| 99国内精品久久| 亚洲精品综合久久中文字幕| 免费短视频成人日韩| 亚洲黄色影院| 99精品欧美一区二区三区| 亚洲剧情一区二区| 亚洲图片欧洲图片日韩av| 亚洲精品一区二区在线| 国产精品久久久久久久久久久久久久| 欧美图区在线视频| 国内精品久久久| aa级大片欧美三级| 亚洲欧美日韩国产综合在线| 精品1区2区| 亚洲免费av网站| 国产无遮挡一区二区三区毛片日本| 亚洲精品1区2区| 欧美专区18| 欧美四级电影网站| 亚洲高清成人| 亚洲视频在线一区| 欧美黑人国产人伦爽爽爽| 国产精品少妇自拍| 美女尤物久久精品| 亚洲日本中文字幕| 欧美aaa级| 亚洲另类自拍| 国产精品国产三级国产aⅴ9色 | 欧美在线视频一区二区三区| 一区二区91| 国产精品夜色7777狼人| 亚洲天堂网站在线观看视频| 久久国产福利| 亚洲国产视频一区|