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

We do not always find visible happiness in proportion to visible virtue

夢幻白樺林

SHARE

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  14 Posts :: 58 Stories :: 62 Comments :: 0 Trackbacks

公告

常用鏈接

留言簿(5)

搜索

  •  

最新隨筆

最新評論

閱讀排行榜

面向?qū)ο蟮脑O(shè)計模式是經(jīng)驗的總結(jié),MVC思想是原先用于構(gòu)建用戶界面的。這篇文章主要論述了如何在新的Web應(yīng)用領(lǐng)域中使用設(shè)計模式和MVC架構(gòu)。文章首先介紹了設(shè)計模式的概念和特點,以及MVC架構(gòu)的設(shè)計思想,并分析了MVC架構(gòu)中包含的幾種主要的模式。然后根據(jù)Web應(yīng)用系統(tǒng)的特點,就如何應(yīng)用模式和MVC架構(gòu)提出了一些設(shè)計思路。

1. 引言
1.1 設(shè)計模式

面向?qū)ο蠹夹g(shù)的出現(xiàn)和應(yīng)用大大提高了軟件的重用性和軟件的質(zhì)量。面向?qū)ο蟮木幊桃脖纫酝母鞣N編程模式要簡單和高效,但是面向?qū)ο蟮脑O(shè)計方法要比以往的設(shè)計方法要復(fù)雜和有技巧得多,一個良好的設(shè)計應(yīng)該既具有對問題的針對性,也充分考慮到對將來問題和需求有足夠的通用性。在過去的十幾年中,人們在對面向?qū)ο蠹夹g(shù)的研究探索和實際應(yīng)用中針對某些問題創(chuàng)造了一些良好的解決方案,即所謂的面向?qū)ο蟮脑O(shè)計模式。面向?qū)ο蠹夹g(shù)的目的之一就是提高軟件的重用性,而對設(shè)計模式、設(shè)計方案的重用則從更深的層次上體現(xiàn)了重用的意義和本質(zhì)。
人們對設(shè)計模式有很多定義,其中被引用的最多是Christopher Alexander的設(shè)計模式的定義:每一個設(shè)計模式是一個三方的規(guī)則,它表達了一個上下文環(huán)境(Context),一個問題和一個解決方案。設(shè)計模式一般有如下幾個基本要素:模式名稱,問題,目的,解決方案,效果,樣例代碼和相關(guān)設(shè)計模式。
設(shè)計模式的分類有好幾種,可以根據(jù)其目的分為創(chuàng)建型(Creational),結(jié)構(gòu)型(Structural)和行為型(Behavioral)三種。創(chuàng)建型模式主要是用來創(chuàng)建對象,結(jié)構(gòu)型模式主要是處理類或?qū)ο蟮慕M合,行為型模式則主要用來描述對類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)。也可以根據(jù)范圍將設(shè)計模式分為類模式和對象模式,類模式處理類和子類之間的關(guān)系,這些關(guān)系通過繼承建立,在編譯時刻就被確定下來,是屬于靜態(tài)的。對象模式是處理對象間的關(guān)系,這些關(guān)系在運行時刻變化,更具動態(tài)性。
模式的特點:是通過經(jīng)驗獲取的,以某種結(jié)構(gòu)化的格式書寫下來,避免了遇到相同的問題重頭設(shè)計,存在于不同的抽象層,在不斷完善的,是可重用的人工產(chǎn)物,使設(shè)計和最好的練習(xí)交互,以被組合起來解決更大的問題。

1.2 MVC架構(gòu)
MVC最初是在Smalltalk-80中被用來構(gòu)建用戶界面的。M代表模型Model, V代表視圖 View, C代表 控制器Controller。
MVC的目的是增加代碼的重用率,減少數(shù)據(jù)表達,數(shù)據(jù)描述和應(yīng)用操作的耦合度。 同時也使得軟件可維護性,可修復(fù)性,可擴展性,靈活性以及封裝性大大提高。
單用戶的應(yīng)用通常是以事件驅(qū)動的用戶界面為組織結(jié)構(gòu)的。開發(fā)人員用一個界面工具畫了一個用戶接口界面,然后編寫代碼根據(jù)用戶輸入去執(zhí)行相應(yīng)的動作,許多交互式的開發(fā)環(huán)境鼓勵這么做,因為它強調(diào)先有界面然后再有功能。一些軟件設(shè)計模式策略是這樣的,然后經(jīng)常將固定后的代碼融入最后的系統(tǒng)當(dāng)中。導(dǎo)致的結(jié)果就是,程序組織圍繞用戶界面元素和用戶在那些界面元素上的動作,數(shù)據(jù)的存儲,應(yīng)用的功能以及用來顯示的代碼都雜亂無章的纏繞在一起。在單用戶的系統(tǒng)里代碼結(jié)構(gòu)是可以這樣的,因為系統(tǒng)需求不會頻繁變化。但是對一個大的系統(tǒng)如大型Web系統(tǒng),或電子商務(wù)系統(tǒng)來說就不太適用了。
通過把數(shù)據(jù)模式從各種可以被存取和控制的數(shù)據(jù)中分離出來可以改善分布式系統(tǒng)的設(shè)計。MVC設(shè)計模式由三部分組成。模型是應(yīng)用對象,沒有用戶界面。視圖表示它在屏幕上的顯示,代表流向用戶的數(shù)據(jù)。控制器定義用戶界面對用戶輸入的響應(yīng)方式,負(fù)責(zé)把用戶的動作轉(zhuǎn)成針對Model的操作。Model 通過更新View的數(shù)據(jù)來反映數(shù)據(jù)的變化。
三者關(guān)系如圖:


對MVC關(guān)系圖的理解

圖2 MVC的分工與協(xié)作

2. MVC中的設(shè)計模式
一個以MVC為架構(gòu)的系統(tǒng)包含了很多的設(shè)計模式,但是與MVC最為密切相關(guān)的是下面三種模式:Observer, Composite和Strategy。
2.1 Observer模式
MVC通過使用定購/通知的方式分離了Model和View。View要保證自己顯示能正確地反映出Model的內(nèi)容和狀態(tài)。一旦Model的內(nèi)容發(fā)生變化,必須有一個機制來使得Model能夠通知相關(guān)的View,使得相關(guān)的View可以在適當(dāng)?shù)臅r機刷新數(shù)據(jù)。這個設(shè)計還可以解決更一般的問題,將對象分離,使得一個對象的改變能夠影響到另一些對象,而這個對象并不知道那些被影響的對象的細(xì)節(jié)。這就是被描述為Observer的設(shè)計模式。
模式類型:Observer模式是對象型模式,同時它也是行為型模式。
模式目的:定義對象間的一對多的依賴關(guān)系,當(dāng)一個對象的值或狀態(tài)發(fā)生改變時,所有與它有依賴關(guān)系的對象都得到通知并自動更新。某一數(shù)據(jù)可能有多種顯示方式,并且可能同時以不同的方式顯示(如圖2)。當(dāng)通過某一種方式改變了數(shù)據(jù),那么其他的顯示都應(yīng)該能立即知道數(shù)據(jù)的改變和做相應(yīng)的調(diào)整。
模式結(jié)構(gòu):

圖 3. Observer模式的結(jié)構(gòu)圖

效果:
1. 抽象耦合。目標(biāo)對象只知道它有一些觀察者,每個觀察者都符合抽象的Observer類的簡單接口,并不知道它們具體屬于哪個類。這樣使得目標(biāo)和觀察者之間的耦合最小且抽象。
2. 支持廣播通信。目標(biāo)發(fā)送通知不用指定觀察者,如何處理通知由觀察者決定。
3. 可能的意外更新。要處理好更新邏輯,避免錯誤更新。

2.2 Composite模式
MVC的一個重要特征就是View可以嵌套。嵌套的組合視圖可用于任何視圖可用的地方,而且可以管理嵌套視圖。這種思想反映出將組合的視圖與其組件平等對待的設(shè)計。這種設(shè)計思想在面向?qū)ο箢I(lǐng)域內(nèi)被描述成為Composite的設(shè)計模式。
模式類型:Composite模式是對象型模式,同時它也是結(jié)構(gòu)型模式。
模式目的:將對象組合成樹形結(jié)構(gòu)以表示"部分-整體"層次結(jié)構(gòu)。Composite使組合對象的使用和單個對象的使用具有一致性。
模式結(jié)構(gòu):

圖4. Composite模式的結(jié)構(gòu)圖
效果:
1. 定義了包含簡單對象和組合對象的類層次結(jié)構(gòu)。簡單對象可以被組合到復(fù)雜對象中,而組合的對象可以再被組合。這樣客戶端代碼中用到簡單對象的地方都可以使用組合對象。
2. 簡化客戶端代碼。客戶端不用知道某對象是簡單對象還是組合對象,可以以一致的方式使用這些對象。
3. 更容易增加新類型的組件。新的組件可以方便地加入已有組合對象中不用改變客戶端代碼。

2.3 Strategy模式
MVC的另一重要特征是可以在不改變View的情況下改變View對用戶輸入的響應(yīng)方式。這對一個經(jīng)常需要變更響應(yīng)邏輯的系統(tǒng)來說是非常重要的。MVC把響應(yīng)邏輯封裝在Controller中。有一個Controller的類層次結(jié)構(gòu),可以方便地對原有Controller做適當(dāng)改變,創(chuàng)建新的Controller。View使用Controller子類的實例來實現(xiàn)一個特定的響應(yīng)策略。要實現(xiàn)不同的響應(yīng)策略,只要用不同種類的Controller實例替換即可。還可以在運行時刻通過改變View的Controller來改變View對用戶輸入的響應(yīng)策略。這種View-Controller的關(guān)系是被描述為Strategy的設(shè)計模式的一個例子。
模式類型:Strategy模式是對象型模式,同時它也是行為型模式。
模式目的:定義一系列的算法,并且把它們封裝起來,使它們可以互相替換,使得算法可以獨立于使用它的客戶端而變化。
模式結(jié)構(gòu):

圖5. Strategy模式的結(jié)構(gòu)圖

效果:
1. Strategy類層次為Context定義了可重用的相關(guān)算法或行為。
2. 替代繼承的方法。如果直接繼承Context,給以不同的行為,會將行為加到Context中,從而將算法的實現(xiàn)與Context混合起來,使Context難以理解,維護和擴展,而且不能動態(tài)地改變算法。將算法封裝在獨立的Strategy類,可以使得算法獨立于Context改變,容易切換擴展。
3. 可以提供相同行為的不同實現(xiàn)。
4. 客戶端必須了解Strategy之間有何不同。
5. Context和Strategy之間的通信開銷。
6. 增加了對象的數(shù)目。

3. MVC在 Web系統(tǒng)中的應(yīng)用
現(xiàn)在的一些基于Web的分布式系統(tǒng)如B2B電子商務(wù)系統(tǒng),就適合采用MVC架構(gòu)。
通過分析,從高層次的角度可以將一個應(yīng)用的對象分為三類。一類就是負(fù)責(zé)顯示的對象,一類對象包含商業(yè)規(guī)則和數(shù)據(jù),還有一類就是接收請求,控制商業(yè)對象去完成請求。這些應(yīng)用的顯示是經(jīng)常需要變換的,如網(wǎng)頁的風(fēng)格,色調(diào),還有需要顯示的內(nèi)容,內(nèi)容的顯示方式等。而商業(yè)規(guī)則和數(shù)據(jù)是相對要穩(wěn)定的。因此,表示顯示的對象View經(jīng)常需要變化的,表示商業(yè)規(guī)則和數(shù)據(jù)的對象Model要相對穩(wěn)定,而表示控制的Controller則最穩(wěn)定。
通常當(dāng)系統(tǒng)發(fā)布后,View對象是由美工,HTML/JSP設(shè)計人員或者系統(tǒng)管理員來負(fù)責(zé)管理的。Controller對象由應(yīng)用開發(fā)人員開發(fā)實施,商業(yè)規(guī)則對象和商業(yè)數(shù)據(jù)對象則由開發(fā)人員,領(lǐng)域?qū)<液蛿?shù)據(jù)庫管理員共同完成的。顯示邏輯在Web層或客戶端控制,可以是Servlet 或JSP,動態(tài)地生成Html。一般來說采用JSP要比采用Servlet要好。JSP更好地將代碼與Html部分分開,有利于頁面設(shè)計人員和代碼開發(fā)人員的分離,提高效率。同時JSP可以完成所有Servlet完成的功能,實際上JSP最終也轉(zhuǎn)換成一個Servlet。與控制有關(guān)的對象存在于系統(tǒng)的每一個層次,協(xié)調(diào)跨層動作。包含商業(yè)規(guī)則和數(shù)據(jù)的對象存在于EJB層(以EJB為中心的模式)或Web層(以Web為中心的模式)。

3.1 View在Web系統(tǒng)中的應(yīng)用
View代表系統(tǒng)的顯示,它完全存在于Web層。一般由JSP, Java Bean和Custom Tag組成。JSP可以動態(tài)生成網(wǎng)頁內(nèi)容,Custom Tag 更方便了使用Java Bean,而且它可以封裝顯示邏輯,更有利于于模塊化和重用。一些設(shè)計良好的Custom Tag可以在多個JSP甚至可以在不同的系統(tǒng)里重復(fù)使用。Java Bean用來控制JSP和Model對象。JSP通過Java Bean 來讀取Model對象中的數(shù)據(jù),Model和Controller對象則負(fù)責(zé)對Java Bean的數(shù)據(jù)更新。一般來說,可以先要設(shè)計出所有可能出現(xiàn)的屏幕,即用戶使用系統(tǒng)時可以看到的所有內(nèi)容。然后根據(jù)這些內(nèi)容,找出公共部分,靜態(tài)部分和動態(tài)變化部分。可以考慮使用模板方法,把公用的內(nèi)容單獨生成JSP,需要變化的也各自生成Html或JSP, 由一個模板JSP, 把這些不同部分動態(tài)地引入(include方法)。還有一個要考慮的問題就是屏幕的選擇問題,當(dāng)處理完用戶請求,模板被自動調(diào)用來顯示,這個顯示一定要知道用戶關(guān)心的屏幕是有哪些部分組成。所以可以考慮把所有屏幕的定義放在一個集中的文件里,如一個java文件或文本文件。由于考慮到屏幕定義文件將來的變更可能性,最好使用文本文件如一個XML文件,這樣將來更改不用重新編譯。可以根據(jù)用戶輸入的URL和參數(shù)可以映射到某一個結(jié)果屏幕,當(dāng)然有可能還要根據(jù)動作的執(zhí)行結(jié)果選擇不同的結(jié)果屏幕內(nèi)容。所以需要一個請求與資源的匹配文件(XML),如果一個URL請求有幾種不同結(jié)果,則要在該文件中指明是否需要流控制(一種controller對象)以及不同流向的對應(yīng)屏幕。

3.2 Model在Web系統(tǒng)中的應(yīng)用

Model對象代表了商業(yè)規(guī)則和商業(yè)數(shù)據(jù),存在于EJB層和Web層。在J2EE的規(guī)范中,系統(tǒng)有些數(shù)據(jù)需要存儲于數(shù)據(jù)庫中,如用戶的賬號信息(account model),公司的數(shù)據(jù)(company model)等,也有一些不需要記錄在數(shù)據(jù)庫里的,如某用戶瀏覽的當(dāng)前產(chǎn)品目錄(catalog model),他的購物內(nèi)容(shopping cart model)等。這些model數(shù)據(jù)存在于哪一層要根據(jù)它們的生命周期和范圍來決定。在Web層有HttpSession和ServletContext及Java Bean對象來存儲數(shù)據(jù),在EJB層則有EJB來存儲數(shù)據(jù)和邏輯。Web層的Java Bean的model對象存儲了EJB層model對象的數(shù)據(jù)的拷貝。因為EJB層有很多不同的model對象,所以Web層可以通過一個ModelManager來控制EJB層的各model對象,在ModelManger中可以封裝使用后臺model對象的方法。
在EJB層把所有的數(shù)據(jù)和規(guī)則都模式化為EJB也是不恰當(dāng)?shù)摹H缈梢园汛嫒?shù)據(jù)庫的對象模式化為DAO對象。DAO中可以封裝與具體數(shù)據(jù)庫的交互細(xì)節(jié),如可以讀寫不同的表,多個數(shù)據(jù)庫,甚至多種數(shù)據(jù)庫。如定單的model對象可以是一個OrderDAO, 它可能要同時處理Order表,OrderStatus表和OrderItemLines表。
還有可以考慮使用Value對象。一個Value 對象可以封裝遠程對象,因為每一個讀遠程對象的屬性都可能是一個遠程過程調(diào)用,都會耗費網(wǎng)絡(luò)資源。可以在EJB的遠程對象中使用Value對象. 在遠程對象中一次性得到Value對象來得到所有屬性的值。

3.3 Controller在Web系統(tǒng)中的應(yīng)用
Controller對象協(xié)調(diào)Model與View,把用戶請求翻譯成系統(tǒng)識別的事件。在Web層,一般有一個MainServlet(或Main.jsp),接收所有請求,它可以調(diào)用屏幕流管理器(ScreenFlowManger)決定下一個屏幕。一般還有一個請求處理器RequestProcessor,包含所有請求都需要做的處理邏輯,如把請求翻譯成系統(tǒng)事件(RequestToEvent)。請求處理器通常還包含一個代理對象ClientControlWebImpl,它是EJB層的邏輯處理的在Web層的代理。在EJB層,有一個ClientController提供Web 層對EJB層的只讀訪問。還有一個StateMachine用來建立和刪除ejb,處理Web層送來的事件。
Controller還有一個重要的功能就是同步View和Model的數(shù)據(jù)。在ModelManger中包含一個ModelUpdateManger,它把系統(tǒng)事件轉(zhuǎn)換為一個Model的集合,即所有需要同步的Model,然后通知Listeners去做同步操作。

4. 結(jié)束語
近年來隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展和新的商業(yè)模式的出現(xiàn),必然會出現(xiàn)大量基于Web的應(yīng)用系統(tǒng)。對于如何設(shè)計這些系統(tǒng)的體系結(jié)構(gòu),也逐漸有了一些統(tǒng)一的認(rèn)識,最主要的是的就是其體系結(jié)構(gòu)要合理,開放。需求永遠會比技術(shù)和設(shè)計思想發(fā)展快,要使將來系統(tǒng)的升級所付出的代價最小,研究軟件系統(tǒng)的體系結(jié)構(gòu)還是非常很用和有必要的。

參考文獻
[1] 設(shè)計模式,作者Erich Gamma 等,ISBN 7-111-07575-7, 機械工業(yè)出版社 2000.9
[2] Core J2EE Patterns, 作者Deepak Alurm 等, ISBN 0-13-064884-1, Sun Microsystems Inc, 2001年
[3] Designing Enterprise Applications with the J2EETM Platform, 作者Nicholas Kassem 等, Sun Microsystems, Inc. 2000年

posted on 2007-05-15 09:12 colys 閱讀(505) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产免费亚洲高清| 免费在线日韩av| 日韩一区二区精品视频| 久久九九免费| 亚洲精品在线视频| 在线亚洲精品| 狠狠爱www人成狠狠爱综合网| 久久久久久精| 欧美激情综合网| 久久狠狠一本精品综合网| 久久久久久噜噜噜久久久精品| 亚洲国产二区| 亚洲欧美日韩国产成人精品影院| 国产日韩精品在线播放| 久久久综合网| 玖玖在线精品| 久久精品国产亚洲a| 久久亚洲欧美| 亚洲欧美视频一区| 欧美成人精品激情在线观看| 亚洲欧洲免费视频| 香蕉久久一区二区不卡无毒影院| 欧美日韩精品系列| 午夜精品久久99蜜桃的功能介绍| 亚洲欧美日韩国产一区二区| 精品成人国产| 亚洲欧美国产日韩天堂区| 国产在线不卡精品| 亚洲一区二区动漫| 欧美三区免费完整视频在线观看| 性欧美xxxx大乳国产app| 欧美色精品天天在线观看视频| 亚洲精品美女在线观看播放| 狠狠色丁香婷婷综合| 欧美一区二区精品久久911| 亚洲欧美www| 国产精品播放| 欧美在线一二三| 欧美国产日韩免费| 在线视频亚洲欧美| 国产午夜久久久久| 久久一二三四| 99国产精品久久久久久久成人热| 一本色道久久综合精品竹菊 | 一区二区三区四区五区精品| 亚洲乱码精品一二三四区日韩在线| 欧美国产激情| 亚洲欧美卡通另类91av| 玖玖国产精品视频| 久久久久欧美精品| 91久久极品少妇xxxxⅹ软件| 亚洲日本aⅴ片在线观看香蕉| 欧美韩日一区二区| 亚洲欧美日韩天堂| 亚洲国产成人av好男人在线观看| 中日韩视频在线观看| 国产欧美一区二区三区久久| 欧美在线短视频| 亚洲九九九在线观看| 久久精品国产一区二区三区免费看| 伊人久久婷婷| 国产精品福利在线观看| 久久精品一区四区| 夜夜精品视频一区二区| 老司机午夜精品| 亚洲欧美韩国| 欧美日韩第一区| 久久精品一级爱片| 亚洲深夜福利视频| 亚洲国产精品久久久久久女王| 亚洲欧美不卡| 日韩一级在线| 一区精品在线| 国产欧美一区二区三区视频| 久久亚洲综合色一区二区三区| 美女国产一区| 欧美中文在线观看国产| 99这里只有久久精品视频| 国内揄拍国内精品久久| 欧美视频观看一区| 欧美激情精品久久久久久黑人| 亚洲欧美经典视频| 一本色道久久综合亚洲精品高清 | 国产一级一区二区| 亚洲线精品一区二区三区八戒| 欧美.com| 久久久久久国产精品mv| 亚洲午夜精品网| 亚洲精品久久久久久久久久久| 国产一区二区精品久久91| 欧美视频在线一区| 欧美护士18xxxxhd| 另类成人小视频在线| 亚洲欧美日韩综合aⅴ视频| 亚洲理伦在线| 亚洲精品老司机| 亚洲国产一区二区三区在线播| 久久午夜电影网| 久久中文在线| 美女露胸一区二区三区| 久久精品首页| 久久久久久久一区二区三区| 日韩亚洲精品在线| 99视频日韩| 99这里只有久久精品视频| 亚洲精品国产视频| 亚洲精品一二三| 一本色道久久综合亚洲二区三区 | 久久九九精品| 久久人91精品久久久久久不卡| 亚洲欧美另类中文字幕| 亚洲免费在线观看| 亚洲欧美色婷婷| 欧美在线视频网站| 久久久噜噜噜久久久| 久久久国产一区二区| 欧美一区二区黄| 久久噜噜噜精品国产亚洲综合| 久久精品国产99| 美女日韩欧美| 欧美日本久久| 国产日韩在线看片| 在线不卡a资源高清| 在线看片成人| 99国产精品久久久| 亚洲免费视频成人| 欧美一区二区成人6969| 欧美在线一级视频| 另类激情亚洲| 亚洲免费精彩视频| 欧美一级日韩一级| 免费亚洲婷婷| 欧美日韩一区二区视频在线观看 | 一本到高清视频免费精品| 亚洲乱码精品一二三四区日韩在线| 99热免费精品| 久久国产福利国产秒拍| 美脚丝袜一区二区三区在线观看| 免费亚洲一区二区| 国产精品美女xx| 精品1区2区| 亚洲午夜精品久久| 久久亚洲视频| 日韩亚洲欧美成人| 久久aⅴ国产紧身牛仔裤| 老司机免费视频一区二区| 欧美精品一区二区三区四区| 欧美日韩伦理在线| 樱花yy私人影院亚洲| 99香蕉国产精品偷在线观看| 亚洲图片在线观看| 裸体一区二区| 亚洲天堂av图片| 欧美sm视频| 国产亚洲视频在线| 一本一本a久久| 裸体素人女欧美日韩| 99精品免费网| 麻豆av一区二区三区久久| 欧美日本一区二区三区| 国产视频观看一区| 国产精品99久久久久久有的能看| 欧美在线网站| 中国成人黄色视屏| 亚洲欧美日韩精品| 亚洲专区一区| 亚洲成人在线网| 午夜亚洲视频| 欧美午夜精品久久久久久人妖| 国产人成精品一区二区三| 亚洲精品永久免费| 久久这里只有精品视频首页| 亚洲国产欧美一区| 久久精品一区二区三区不卡牛牛 | 久久精品视频在线免费观看| 美女主播一区| 黑人操亚洲美女惩罚| 一区电影在线观看| 欧美成人免费在线| 久久精品亚洲精品国产欧美kt∨| 欧美日韩亚洲激情| 亚洲免费av电影| 欧美成人午夜激情在线| 午夜精品一区二区三区在线视 | 亚洲欧洲一区二区三区| 午夜视频在线观看一区二区| 巨乳诱惑日韩免费av| 国产精品国产三级国产aⅴ9色 | 欧美成人dvd在线视频| 国产农村妇女毛片精品久久莱园子| 亚洲第一黄色| 久久综合九色欧美综合狠狠| 日韩亚洲精品在线| 欧美成人免费va影院高清| 国产一区二区三区无遮挡| 亚洲自拍偷拍网址| 亚洲毛片在线观看.| 欧美高清视频在线播放| 在线成人中文字幕| 久久久久久九九九九|