3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

架构师之路

發布時間:2023/12/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 架构师之路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 架構師之路(1)---面向過程和面向對象

1、引言
???機算機科學是一門應用科學,它的知識體系是典型的倒三角結構,所用的基礎知識并不多,只是隨著應用領域和方向的不同,產生了很多的分支,所以說編程并不是一件很困難的事情,一個高中生經過特定的訓練就可以做得到。但是,會編程和編好程絕對是兩碼事,同樣的程序員,有的人幾年之后成為了架構師,有的人卻還在不停地coding,只不過ctrl-c、ctrl-v用得更加純熟了。在中國,編程人員最終的歸途無外乎兩條:一是轉向技術管理,它的終點是CTO;二是繼續深入,它的終點是首席架構師,成為CEO的人畢竟是少數。如果你現在還是個普通的程序員,希望繼續在技術這條路上前進的話,我想你還是應該先補充一點軟件工程的思想,學習一點有關設計模式的知識,只有具備這些能力,你才能從整體和宏觀層面來考慮問題、分析問題和解決問題。本人Coding了很多年,中間走了不少彎路,雖然最終沒什么大成就,但總算有一些心得,很愿意把自己的一些經驗拿出來跟大家分享,這或許對你的發展有所幫助。

由程序員轉為架構師,最繞不開的概念就算是面向對象(OO)了。記得在大學的時候,我們專業開了一門課叫《面向對象的編程》。那個時候,我們剛剛學了一門C語言,開發環境用的還是DOS下的TurboC,半點項目開發的經驗都沒有,純粹的空對空。所以,一學期下來,我始終處于一種懵懂狀態,既沒領會面向過程和面向對象到底有什么區別,也沒搞懂面向對象能帶來什么好處。


2、面向過程(OP)和面向對象(OO)


2.1 蛋炒飯和蓋澆飯
???有人這么形容OP和OO的不同:用面向過程的方法寫出來的程序是一份蛋炒飯,而用面向對象寫出來的程序是一份蓋澆飯。所謂蓋澆飯,北京叫蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白米飯上面澆上一份蓋菜,你喜歡什么菜,你就澆上什么菜。我覺得這個比喻還是比較貼切的。
蛋炒飯制作的細節,我不太清楚,因為我沒當過廚師,也不會做飯,但最后的一道工序肯定是把米飯和雞蛋混在一起炒勻。蓋澆飯呢,則是把米飯和蓋菜分別做好,你如果要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;如果要一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲。


??? 蛋炒飯的好處就是入味均勻,吃起來香。如果恰巧你不愛吃雞蛋,只愛吃青菜的話,那么唯一的辦法就是全部倒掉,重新做一份青菜炒飯了。蓋澆飯就沒這么多麻煩,你只需要把上面的蓋菜撥掉,更換一份蓋菜就可以了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那么香。
到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定一個場景,否則只能說是各有所長。如果大家都不是美食家,沒那么多講究,那么從飯館角度來講的話,做蓋澆飯顯然比蛋炒飯更有優勢,他可以組合出來任意多的組合,而且不會浪費。

2.2 軟件工程
???蓋澆飯的好處就是“菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是“可維護性”比較好,“飯”和“菜”的耦合度比較低。蛋炒飯將“蛋”“飯”攪和在一起,想換“蛋”“飯”中任何一種都很困難,耦合度很高,以至于“可維護性”比較差。軟件工程追求的目標之一就是可維護性,可維護性主要表現在3個方面:可理解性、可測試性和可修改性。面向對象的好處之一就是顯著的改善了軟件系統的可維護性。


???面向過程(OP)和面向對象(OO)是不是就是指編碼的兩種方式呢?不是!你拿到了一個用戶需求,比如有人要找你編個軟件,你是不是需要經過需求分析,然后進行總體/詳細設計,最后編碼,才能最終寫出軟件,交付給用戶。這個過程是符合人類基本行為方式的:先想做什么,再想如何去做,最后才是做事情。有的同學說:“我沒按照你說的步驟做啊,我是直接編碼的”。其實,你一定會經歷了這三個階段,只不過你潛意識里沒有分得那么清楚。對于拿到需求就編碼的人,可能編著編著,又得倒回去重新琢磨,還是免不了這些過程,


???以OO為例,對應于軟件開發的過程,OO衍生出3個概念:OOA、OOD和OOP。采用面向對象進行分析的方式稱為OOA,采用面向對象進行設計的方式稱為OOD,采用面向對象進行編碼的方式稱為OOP。面向過程(OP)和面向對象(OO)本質的區別在于分析方式的不同,最終導致了編碼方式的不同。

2.3 面向過程(OP)和面向對象(OO)
(未完待續)

2.3 面向過程編程(OPP) 和面向對象編程(OOP)的關系


??? 關于面向過程的編程(OPP)和面向對象的編程(OOP),給出這它們的定義的人很多,您可以從任何資料中找到很專業的解釋,但以我的經驗來看,講的相對枯燥一點,不是很直觀。除非您已經有了相當的積累,否則說起來還是比較費勁。

我是個老程序員出身,雖然現在的日常工作更多傾向了管理,但至今依然保持編碼的習慣,這句話什么意思呢?我跟大家溝通應該沒有問題。無論你是在重復我走過的路,或者已經走在了我的前面,大家都會有那么一段相同的經歷,都會在思想層面上有一種理解和默契,所以我還是會盡量按照大多數人的常規思維寫下去。

面向過程的編程(OPP)產生在前,面向對象的編程(OOP)產生在后,所以面向對象的編程(OOP)一定會繼承前者的一些優點,并摒棄前者存在的一些缺點,這是符合人類進步的自然規律。兩者在各自的發展和演變過程中,一定會相互借鑒,相互融合,吸收對方的優點,從而出現某些方面的趨同性。但是,即使兩者有更多的相似點,也不會改變它們本質上的不同,因為它們的出發點不同,完全是兩種截然不同的思維方式。關于兩者的關系,我的觀點是這樣的:面向對象編程(OOP)在局部上一定是面向過程(OP)的,面向過程的編程(OPP)在整體上應該借鑒面向對象(OO)的思想。這一段說的的確很空洞,而且也一定會有引來爭議,不過,我勸您還是在閱讀了后面的內容之后,再來評判我觀點的正確與否。

象C++、C#、Java等都是面向對象的語言,c,php(暫且這么說,因為php4以后就支持OO)都是面向過程的語言,那么是不是我用C++寫的程序一定就是面向對象,用c寫的程序一定就是面向過程呢?這種觀點顯然是沒有真正吃透兩者的區別。語言永遠是一種工具,前輩們每創造出來的一種語言,都是你用來實現想法的利器。我覺得好多人用C#,Java寫出來的代碼,要是仔細看看,那實際就是用面向對象(OO)的語言寫的面向過程(OP)的程序。

所以,即使給關羽一根木棍,給你一桿青龍偃月刀,他照樣可以打得你滿頭是包。你就是扛著個偃月刀,也成不了關羽,因為你缺乏關羽最本質的東西---絕世武功。同樣的道理,如果你沒有領會OO思想,怎么可能寫得出真正的OO程序呢?

那是不是面向過程就不好,也沒有存在的必要了?我從來沒有這樣說過。事實上,面向過程的編程(OPP)已經存在了幾十年了,現在依然有很多人在使用。它的優點就是邏輯不復雜的情況下很容易理解,而且運行效率遠高于面向對象(OO)編寫的程序。所以,系統級的應用或準實時系統中,依然采用面向過程的編程(OPP)。當然,很多編程高手以及大師級的人物,他們由于對于系統整體的掌控能力很強,也喜歡使用面向過程的編程(OPP),比如像Apache,QMail,PostFix,ICE等等這些比較經典的系統都是OPP的產物。象php這些腳本語言,主要用于web開發,對于一些業務邏輯相對簡單的系統,也常使用面向過程的編程(OPP),這也是php無法跨入到企業級應用開發的原因之一,不過php5目前已經能夠很好的支持OO了。

?

2.4 詳解面向過程的編程(OPP)

?在面向對象出現之前,我們采用的開發方法都是面向過程的編程(OPP)。面向過程的編程中最常用的一個分析方法是“功能分解”。我們會把用戶需求先分解成模塊,然后把模塊分解成大的功能,再把大的功能分解成小的功能,整個需求就是按照這樣的方式,最終分解成一個一個的函數。這種解決問題的方式稱為“自頂向下”,原則是“先整體后局部”,“先大后小”,也有人喜歡使用“自下向上”的分析方式,先解決局部難點,逐步擴大開來,最后組合出來整個程序。其實,這兩種方式殊路同歸,最終都能解決問題,但一般情況下采用“自頂向下”的方式還是較為常見,因為這種方式最容易看清問題的本質。

我舉個例子來說明面向過程的編程方式:

用戶需求:老板讓我寫個通用計算器。

最終用戶就是老板,我作為程序員,任務就是寫一個計算器程序。OK,很簡單,以下就是用C語言完成的計算器:

假定程序的文件名為:main.c。

int main(int argc, char *argv[]){

??? //變量初始化
??? int nNum1,nNum2;
??? char cOpr;
??? int nResult;
??? nNum1 = nNum2 = 0;
??? cOpr = 0;
??? nResult = 0;

??? //輸入數據
??? printf("Please input the first number:/r/n");
??? scanf("%d",&nNum1);
??? printf("Please input the operator:/r/n");
??? scanf("%s",&cOpr);
??? printf("Please input the second number:/r/n");
??? scanf("%d",&nNum2);?

??? //計算結果?
??? if( cOpr == '+' ){
??? nResult = nNum1 + nNum2;
??? }else if( cOpr == '-' ){
??? nResult = nNum1 - nNum2;
??? }else{
??? printf("Unknown operator!");
??? return -1;
??? }

??? //輸出結果
??? printf("The result is %d!",nResult);
??? return 0;
}

?

拋開細節不講,我想大多數人差不多都會這么實現吧,很清晰,很簡單,充分體現了“簡單就是美”的原則,面向過程的編程就是這樣有條理的按照順序來逐步實現用戶需求。

凡是做過程序的人都知道,用戶需求從來都不會是穩定的,最多只能夠做到“相對穩定”。用戶可能會隨時提出加個功能,減個功能的要求,也可能會要求改動一下流程,程序員最煩的就是頻繁地變動需求,尤其是程序已經寫了大半了,但這種情況是永遠無法避免的,也不能完全歸罪到客戶或者需求分析師。

以我們上面的代碼為例,用戶可能會提出類似的要求:
首先,你程序中實現了“加法”和“減法”,我還想讓它也能計算“乘法”、“除法”。
其次,你現在的人機界面太簡單了,我還想要個Windows計算器的界面或者Mac計算器的界面。

用戶需求開始多了,我得琢磨琢磨該如何去寫這段代碼了。我今天加了“乘”“除”的運算,明天保不齊又得讓我加個“平方”、“立方”的運算,這要是把所有的運算都窮盡了,怎么也得寫個千八百行代碼吧。還有,用戶要求界面能夠更換,還得寫一大堆界面生成的代碼,又得來個千八百行。以后,這么多代碼堆在一起,怎么去維護,找個變量得半天,看懂了代碼得半天,萬一不小心改錯了,還得調半天。另外,界面設計我也不擅長,得找個更專業的人來做,做完了之后再加進來吧。這個過程也就是“軟件危機”產生的過程。伴隨著軟件廣泛地應用于各個領域,軟件開發的規模變得越來越大,復雜度越來越高,而其用戶的需求越來越不穩定。

根據用戶提出的兩個需求,面向過程的編程該如何去應對呢?我想大家都很清楚怎么去改。Very easy,把“計算”和“界面”分開做成兩個獨立的函數,封裝到不同的文件中。
假定程序的文件名為:main.c。

#include "interface.h"
#include "calculate.h"
int main(int argc, char *argv[]){

??? //變量初始化
??? int nNum1,nNum2;
??? char cOpr;
??? int nResult;
??? nNum1 = nNum2 = 0;
??? cOpr = 0;
??? nResult = 0;

??? //輸入數據
??? if( getParameters(&nNum1,&nNum2,&cOpr) == -1 )
??? return -1;

??? //計算結果?
??? if( calcMachine(nNum1,nNum2,cOpr,&nResult) == -1 )
??? return -1;

??? //輸出結果
??? printf("The result is %d!",nResult);

??? return 0;
}

interface.h:
int getParameters(int *nNum1,int * nNum2,char *cOpr);

interface.c:
int getParameters(int *nNum1,int * nNum2,char *cOpr){
??? printf("Please input the first number:/r/n");
??? scanf("%d",nNum1);
??? printf("Please input the operator:/r/n");
??? scanf("%s",cOpr);
??? printf("Please input the second number:/r/n");
??? scanf("%d",nNum2);

??? return 0;
}

calculate.h:
int calcMachine(int nNum1,int nNum2,char cOpr, int *nResult);

calculate.c:
int calcMachine(int nNum1,int nNum2,char cOpr,int *nResult){
??? if( cOpr == '+' ){
??????? *nResult = nNum1 + nNum2;
??? }else if( cOpr == '-' ){
??????? *nResult = nNum1 - nNum2;
??? }else{
??????? printf("Unknown operator!");
??????? return -1;
??? };
??? return 0;
}

“計算”和“界面”分開之后,添加新功能或者修改bug就方便多了,遇到與“計算”相關的需求就去修改calculate模塊,遇到與“界面”相關的需求就去修改interface模塊,因此,整個系統模塊之間的“耦合度”就被放松了,可維護性有了一定程度的改善。

面向過程的編程(OPP)就是將用戶需求進行“功能分解”。把用戶需求先分解成模塊(.h,.c),再把模塊(.h,.c)分解成大的功能(function),然后把大的功能(function)分解成小的功能(function),如此類推。

功能分解是一項很有技術含量的工作,它不僅需要分解者具有豐富的實戰經驗,而且需要科學的理論作為指導。如何分解,分解原則是什么,模塊粒度多大合適?這些都是架構師的要考慮的問題,也是我們后面要著重講的內容。

面向過程的編程(OPP)優點是程序順序執行,流程清晰明了。它的缺點是主控程序承擔了太多的任務,各個模塊都需要主控程序進行控制和調度,主控和模塊之間的承擔的任務不均衡。
有的人把面向過程定義為:算法 + 數據結構,我覺得也很準確。面向過程的編程中算法是核心,數據處于從屬地位,數據隨算法而流動。所以采用面向過程的方式進行編程,一般在動手之前,都要編寫一份流程圖或是數據流圖。

?

?--------------------------------------------------------

如果大家對本文有意見盡可爭論,歡迎大家隨時拍磚。我有著鋼鐵一樣的心臟和城墻一樣的臉皮,承受能力極強,所以無論是支持意見還是反對反對意見,我都會認真閱讀,只要不是色情淫穢和反動言論,我盡量不刪貼。如果碰到不能理解或者錯誤之處,請指出,我會進行驗證和修改。由于個人能力和時間有限,也只能寫到這樣的水平了,大家諒解。有的朋友找我的qq號,我的資料里就有,加為好友后就可以看到,我的qq對任何人開放。


3 架構師的職責


???近來看到CSDN上有個CTO俱樂部,里面聊得是不亦樂乎。我懷著無比崇敬的態度,拜讀了一下牛人們的發言。里面有個哥們發起一個話題:“CTO,你多久沒有寫程序了?”。有人回答:“不寫代碼的CTO,屬于......這公司問題大了!”。看到這里,我就趕緊撤了,怕忍不住反駁幾句,反而遭到牛人們的群毆。試想,一個上點規模的IT公司,還得靠CTO來寫程序的話,那是不是才叫問題大了呢。當然,我沒有做過CTO,所以我有我的不同看法,而且還愿意表達出來,無知者無畏。我情愿相信:我所理解的CTO跟這位CTO所理解的是兩回事。所以我想,如果有人能把CTO的職責給標準化了,也許就不會有這么多的爭論了。
??? 同樣的道理,關于架構師的定義,大家也有著不同的理解。什么是架構師?架構師有哪些職責?我覺得有必要提前明確一下,要不然大家溝通起來也會產生類似問題,子說子理,卯說卯理,但是壓根說得不是一碼子事。

?

3.1 什么是架構師


曾經有這么個段子:
甲:我已經應聘到一家中型軟件公司了,今天上班的時候,全公司的人都來歡迎我。
乙:羨慕ing,都什么人來了?
甲:CEO、COO、CTO、All of 程序員,還有會計、司機都來了。
乙:哇,他們太重視你了,人才啊,這么多人迎接你!
甲:沒有啊,就一個人!
乙:靠,#%¥$%...


???很多的創業公司,一人身兼數職的情形還是很常見的。至少,我是經歷過的,一個人包辦了所有的開發過程,連測試我都做了,絕對的一條龍,但是經常踩鋼絲、騎獨輪車總會有失足的時候,結果有一次,從我手里發出去的光盤母盤,含有病毒僵尸,以至于被迫收回已經推上市場的2萬張光盤,從那之后,我的心臟就開始變得無比堅強,現在就是整個后臺服務都癱瘓了,我也只是微微一笑。其實,一個人身兼架構師和程序員,甚至多種角色,沒什么不妥,后面還會講這個話題,這種現象不是中國特色,跟國外是完全接軌的。我曾經跟米國的一個工程師在msn中聊過類似的話題,發現他們的路子跟咱們沒什么不同,在IT這個行業,我們跟世界的差距只有1天,他們剛弄出來的新東西,我們這里第2天保準見得到。


??? 架構師這個稱呼不是拍腦袋想出來的,是有國際標準(ISO/IEC42010)可查的。架構師是軟件開發活動中的眾多角色之一,它可能是一個人、一個小組,也可能是一個團隊。微軟對架構師有一個分類參考,我們參考一下,他們把架構師分為4種:企業架構師EA(Enterprise Architect)、基礎結構架構師IA(InfrastructureArchitect)、特定技術架構TSA(Technology-Specific Architect)和解決方案架構師SA (SolutionArchitect)。微軟的這個分類是按照架構師專注的領域不同而劃分的。


???EA的職責是決定整個公司的技術路線和技術發展方向。蓋茨給自己的Title就是首席軟件架構師,網易丁磊也喜歡這么稱呼自己,實際上就是EA角色;IA的工作就是提煉和優化技術方面積累和沉淀形成的基礎性的、公共的、可復用的框架和組件,這些都是一個技術型公司傳承下來的最寶貴的財富之一;特定技術架構師TSA,他們主要從事類似安全架構、存儲架構等專項技術的規劃和設計工作;SA的工作則專于解決方案的規劃和設計,“解決方案”這個詞在中國已經到了嚴重泛濫的程度,大忽悠們最喜歡把它掛在嘴邊。所謂解決方案,就是把產品、技術或理論,不斷地進行組合,來創造出滿足用戶需求的選擇。售前工程師一般都是帶著它到客戶那里去發揮的。


??? 大公司會把各種類型的架構師分得很清楚,小公司一般就不那么講究了,架構師多數是是IA+TSA+SA,一人包打天下,所以說大公司出專才,小公司出全才。


???實際工作中,我們也經常會見到另一種比較簡單的分類方式,把架構師分為軟件架構師和系統架構師。軟件架構師基本上是TSA+IA,這也是程序員最容易突破,最可能走上的一條道路,比如JAVA架構師、DotNet架構師、LAPM架構師等等,我后面所講的內容都是與軟件架構師的相關的話題。系統架構師實際上是SA+TSA,更著力于綜合運用已有的產品和技術,來實現客戶期望的需求。系統架構師要求通曉軟、硬件兩方面的知識,所以它的知識體系相對龐雜。關于系統架構師的話題,我們可以稍后再作討論。

?

3.2 架構師的職責

架構師需要參與項目開發的全部過程,包括需求分析、架構設計、系統實現、集成、測試和部署各個階段,負責在整個項目中對技術活動和技術說明進行指導和協調。
架構師主要職責有4條:

1、確認需求
??? 在項目開發過程中,架構師是在需求規格說明書完成后介入的,需求規格說明書必須得到架構師的認可。架構師需要和分析人員反復交流,以保證自己完整并準確地理解用戶需求。

2、系統分解
??? 依據用戶需求,架構師將系統整體分解為更小的子系統和組件,從而形成不同的邏輯層或服務。隨后,架構師會確定各層的接口,層與層相互之間的關系。架構師不僅要對整個系統分層,進行“縱向”分解,還要對同一邏輯層分塊,進行“橫向”分解。
??? 軟件架構師的功力基本體現于此,這是一項相對復雜的工作。

3、技術選型
??? 架構師通過對系統的一系列的分解,最終形成了軟件的整體架構。技術選擇主要取決于軟件架構。
Web Server運行在Windows上還是Linux上?數據庫采用MSSql、Oracle還是Mysql?需要不需要采用MVC或者Spring等輕量級的框架?前端采用富客戶端還是瘦客戶端方式?類似的工作,都需要在這個階段提出,并進行評估。
架構師對產品和技術的選型僅僅限于評估,沒有決定權,最終的決定權歸項目經理。架構師提出的技術方案為項目經理提供了重要的參考信息,項目經理會從項目預算、人力資源、時間進度等實際情況進行權衡,最終進行確認。

4、制定技術規格說明
??? 架構師在項目開發過程中,是技術權威。他需要協調所有的開發人員,與開發人員一直保持溝通,始終保證開發者依照它的架構意圖去實現各項功能。
??? 架構師與開發者溝通的最重要的形式是技術規格說明書,它可以是UML視圖、Word文檔,Visio文件等各種表現形式。通過架構師提供的技術規格說明書,保證開發者可以從不同角度去觀察、理解各自承擔的子系統或者模塊。
架構師不僅要保持與開發者的溝通,也需要與項目經理、需求分析員,甚至與最終用戶保持溝通。所以,對于架構師來講,不僅有技術方面的要求,還有人際交流方面的要求。

3.3 架構師的誤區

1、架構師就是項目經理
??? 架構師不是項目經理。項目經理側重于預算控制、時間進度控制、人員管理、與外部聯系和協調等等工作,具備管理職能。一般小型項目中,常見項目經理兼架構師。

2、架構師負責需求分析
??? 架構師不是需求分析員。需求分析人員的工作是收集需求和分析需求,并與最終用戶、產品經理保持聯系。架構師只對最終的需求審核和確認,提出需求不清和不完整的部分,他會跟需求分析員時刻保持聯系。架構師是技術專家,不是業務專家。


3、架構師從來不寫代碼
??? 這是一個尚存爭論的問題。目前有兩種觀點:
觀點1:架構師不寫代碼,寫代碼純體力活,架構師寫代碼大材小用。架構師把UML的各種視圖交給開發人員,如果有不明確的地方,可以與架構師隨時溝通。
觀點2:架構師本來自于程序員,只是比程序員站的層面更高,比程序員唯一多的是經驗和知識,所以架構師也免不了寫代碼。
??? 我個人覺得這兩種說法是與架構師的出身和所處的環境有關。
???架構師首先是一個技術角色,所以一定是來自于技術人員這個群體,比如系統架構師,多是來自于運維人員,可能本身代碼寫得并不多,或者說寫不出來很漂亮的代碼。軟件架構師多是來自于程序員,有著程序員的血統和情懷,所以在項目開發過程中,可能會寫一些核心代碼。我們的理想是架構師不用寫代碼,但事實上有時候過于理想。架構師寫不寫代碼,可能取決于公司的規模、文化、開發人員的素質等現實情況。另外,架構師也不是跟程序員界限分得那么清楚,按照能力也有高中低之分,寫不寫代碼不是區分兩者的根本標準。

3.4 架構師的基本素質

周星馳有個片子《喜劇之王》,劇中的尹天仇整天揣著本《演員的自我修養》,一個好演員不僅需要天賦,也需要一定的理論指導,無師自通的人畢竟是少數。架構師的成長過程也是這樣。從普通程序員到高級程序員,再到架構師,是一個經驗積累和思想升華的過程。經驗積累是一個方面,素質培養是另一個方面,兩者相輔相成,所以我覺得有必要把架構師的所要具備的素質羅列一下,作為程序員努力的方向。

1、溝通能力
???為了提高效率,架構師必須贏得團隊成員、項目經理、客戶或用戶認同,這就需要架構師具有較強的溝通能力。溝通能力是人類最普遍性的素質要求,技術人員好像容易忽略,想成為架構師就不能忽略。千萬不要抱著這樣的觀念:懷才跟懷孕似的,時間久了總會被人發現的。還是天橋上賣大力丸的哥們說得對:光說不練假把式,光練不說傻把式。看看你周圍的頭頭腦腦們,哪一個不是此中高手,我們千萬不要鄙視,認為這是阿諛奉承、投機鉆營,凡事都要看到積極的一面,“溝通”的確是一種能力。我認為自己是一個略內向的人,因為我是農村出來的孩子,普通話都說不好,以前或多或少帶有點自卑感,幻想著是金子總會發光,所以在職業生涯中吃了不少虧。現在,我深深懂得了溝通的重要性,我會很主動地跟同事們,跟老大們不定時地溝通,感覺工作起來順暢多了。

??? 這一條我認為最為重要,所以排在首位。我甚至認為下面幾條都可以忽略,唯一這一條得牢記,而且要常常提醒自己。

2、領導能力
????? 架構師能夠推動整個團隊的技術進展,能在壓力下作出關鍵性的決策,并將其貫徹到底。架構師如何來保證這種執行力?這就需要架構師具有領導能力。

???架構師的領導能力的取得跟項目經理不太一樣。項目經理主要負責解決行政管理,這種能力與技術關系不大,他有人權和財權,再扯上一張“領導”的虎皮,采用“胡蘿卜加大棒”的方式,基本上可以保證執行力。架構師在項目里面可能更多地使用非正式的領導力,也就是我們常說的影響力,里面包括個人魅力、技術能力、知識傳遞等等。

3、抽象思維和分析能力
???架構師必須具備抽象思維和分析的能力,這是你進行系統分析和系統分解的基本素質。只有具備這樣的能力,架構師才能看清系統的整體,掌控全局,這也是架構師大局觀的形成基礎。你如何具備這種能力呢?一是來自于經驗,二是來自于學習。架構師不僅要具備在問題領域上的經驗,也需要具備在軟件工程領域內的經驗。也就是說,架構師必須能夠準確得理解需求,然后用軟件工程的思想,把需求轉化和分解成可用計算機語言實現的程度。經驗的積累是需要一個時間過程的,這個過程誰也幫不了你,是需要你去經歷的。但是,如果你有意識地去培養,不斷吸取前人的經驗的話,還是可以縮短這個周期的。這也是我寫作此系列的始動力之一。

4、技術深度和廣度

?? 架構師最好精通1-2個技術,具備這種技術能力可以更加深入的理解有關架構的工作原理,也可以拉近和開發人員的距離,并形成團隊中的影響力。

?? 架構師的技術知識廣度也很重要,需要了解盡可能多的技術,所謂見多識廣,只有這樣,才可能綜合各種技術,選擇更加適合項目的解決方案。有的人說,架構師技術廣度的要求高于技術深度的要求,這是很有道理的。
總而言之,一句話:架構師是項目團隊中的技術權威。

?

面向過程和面向對象這兩個基本概念,不僅架構師需要非常清楚,程序員、設計師也要非常清楚,這也是系統分析、設計和編碼最基本的常識。我接觸的程序員,很多人只停留在一種“似是而非”的程度,這是不行的,想要繼續前進,就得把基礎夯實,所以我覺得很有必要先回回爐,補補課。
---------------------------------------------------------------------------------------------------
后記:在講面向對象之前寫了這么一篇,主要就是要把前面漏下的功課補上。


架構師之路(4)---詳解面向對象

3.5 詳解面向對象的編程(OOP)

3.5.1 什么是面向對象
??? 剛接觸編程的時候,多數人本能的反映可能是面向過程(OP)的,而不是面向對象(OO)的。這種現象其實是很正常的,改變思維方式是需要一個過程的,我大體歸納了一下其形成的原因:


1、直接原因
??? 你還沒有養成面向對象分析問題和解決問題的習慣。建立面向對象的思維方式需要一定時間的訓練和揣摩才能形成,所以你可以在學習或具體項目中刻意地強化這種意識。一般情況下,經過一段時間之后,你會覺得這是自然而然的事情,只有心中OO,眼中自然OO了。


2、歷史原因
??? 我們從小接受的培訓都是采用面向過程(OP)的方式分析問題和解決問題,尤其是數學,多數是強調按部就班的解決問題,計算機軟件的發展一直就與數學是很有淵源,所以,順理成章的,把面向過程(OP)的方式帶入到軟件開發也是很自然的事情。


???什么是面向對象,或者談談你對面向對象的理解,這恐怕是軟件開發人員,尤其是程序員和設計師應聘的時候,面試官常最掛在嘴邊的問題吧。面向對象對應的英文是Object-Oriented,把Object-Oriented翻譯成“面向對象”,我一直覺得這個譯法不太確切,因為多數人第一次看到“面向對象”這四個字,都很難從字面上理解它到底是什么意思。后來,我又查閱了一些有關的資料,發現港澳臺的計算機書籍中是把它翻譯成了“物件導向”,這個譯法,我感覺不錯,于我心頗有些戚戚焉。“物件導向”比較準確地反映了面向對象認識和解決問題都是要圍繞對象展開的。


所以,面向對象的思維方式認為:軟件系統是一組交互的對象的集合。一組相關的對象組合為一個子系統,一組子系統繼續組合為更復雜的子系統,直至組合成整個系統。


??? 面向對象方式的出發點是盡可能模擬人類習慣的思維方式,將“問題域”中涉及的內容抽象為“對象”,使軟件開發的方法與過程盡可能接近人類認識世界解決問題的方法與過程。


??? 面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。

??? 面向過程認識和解決問題的思維,可以稱為“流程論”,重點放在處理過程的步驟,流程是整個系統的核心。

??? 面向對象認識和解決問題的思維,可以稱為“組裝論”,重心放在對象的抽象和提取上,然后將對象組裝為整體。

所以OO和OP從思維方式來講,出發點還是完全不同的。


3.5.2 OP PK OO
??? 咱們用象棋對戰的例子,來比較OP和OO的不同:

?

?
紅方:功夫熊貓 黑方:悍嬌虎 裁判:龜仙人


??? 采用面向過程(OPP)的設計思路,首先分拆整個對戰過程,分析雙方對戰的步驟,得到如下流程:

?

?

?

??? 把上面每個步驟分別用函數進行實現,問題就解決了。

?

??? 我們再來看看面向對象是如何來解決問題,整個象棋游戲可以抽象出3種對象:
1、棋手,負責行棋,這兩者行為一致。
2、棋盤,負責繪制棋盤畫面。
3、裁判,負責判定諸如吃子、犯規和輸贏。


??? 三者之間的關系如下:

?

?
??? 第一類對象棋手負責行棋,并告知第二類對象棋盤中棋子布局的變化,棋盤接收到了棋子布局的變化后,負責在繪制屏幕,同時利用第三類對象裁判來對棋局進行判定。
從以上兩種的實現方式可以看出幾點:


1、可維護性
???面向對象是以數據和功能來劃分問題,而不是依據流程和步驟。同樣是繪制棋盤的行為,在面向過程的設計中分散在了很多的步驟中,很可能出現在不同的繪制版本中,只是不是很像一份“蛋炒飯”中的雞蛋?在面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一,這就是把雞蛋從“蛋炒飯”中分離出來的效果。


2、可擴展性
???假如我要加入悔棋的功能,如果要改動面向過程的設計,那么從行棋到顯示再到判定這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是面向對象的話,只用改動棋盤對象就行了,棋盤對象保存了雙方的棋譜,簡單回溯,減一就可以了,而顯示和判定不涉及,同時整體對各個對象功能的調用順序都沒有變化,改動只限定在了局部。


3.5.3 OO的深層思考
??? OO認為:軟件系統是一組交互的對象的集合。
??? 因為人類對現實世界是非常熟悉的,所以OO就是通過抽象的方式,把問題域映射到現實世界,盡量模擬現實世界的萬事萬物。通過這種方式,就可以運用現實世界中解決問題的方法與過程,來解決軟件領域內的問題。
有人說:OO眼里一切皆對象,這句話還是很有道理的。
OO到底給軟件開發帶來了什么樣的好處?OO的抽象的尺度是如何把握的呢?這都是問題。

?

(未完待續)
---------------------------------------------------------------------------
后記:今天累了,寫到這兒吧。晚上回家的時候碰到兩個blond beauty,they are from USA。They want to goto 2nd foreign language colledge,but did not know how to get there. Itold them the correct route in English. 我學了這么多年的英語,終于幫了國際友人一個小忙。


架構師之路(5)---面向對象的設計原則

1?OO的設計原則
??? 采用面向對象的分析和設計思想,為我們分析和解決問題提供了一種全新的思維方式。我們在拿到需求之后(略去OOA,以后補全),接下來的問題就是:如何對系統進行面向對象的設計呢?
??? 按照軟件工程的理論,面向對象的設計要解決的核心問題就是可維護性和可復用性,尤其是可維護性,它是影響軟件生命周期重要因素。通常情況下,軟件的維護成本遠遠大于初期開發成本。
???一個可維護性很差的軟件設計,人們通常稱之為“臭味”的,形成的原因主要有這么幾個:過于僵硬、過于脆弱、復用率低或者黏度過高。相反,一個好的系統設計應該是靈活的、可擴展的、可復用的、可插拔的。在20世紀80到90年代,很多業內專家不斷探索面向對象的軟件設計方法,陸續提出了一些設計原則。這些設計原則能夠顯著地提高系統的可維護性和可復用性,成為了我們進行面向對象設計的指導原則:

1、單一職責原則SRP
??? 每一個類應該專注于做一件事情。

2、“開-閉”原則OCP
??? 每一個類應該是對擴展開放,對修改關閉。

3、?里氏代換原則LSP
??? 避免造成派生類的方法非法或退化,一個基類的用戶應當不需要知道這個派生類。

4、?依賴倒轉原則DIP
??? 用依賴于接口和抽象類來替代依賴容易變化的具體類。

5、?接口隔離原則ISP
??? 應當為客戶提供盡可能小的接口,而不是提供大的接口。

其中,“開-閉”原則是面向對象的可復用設計的基石,其他設計原則(里氏代換原則、依賴倒轉原則、合成/聚合復用原則、迪米特法則、接口隔離原則)是實現“開-閉”原則的手段和工具。
我會為大家一一進行講解。

2?單一職責原則SRP(Single-Responsibility Principle)


2.1?什么是單一職責
??? 單一職責就是指一個類應該專注于做一件事。現實生活中也存在諸如此類的問題:“一個人可能身兼數職,甚至于這些職責彼此關系不大,那么他可能無法做好所有職責內的事情,所以,還是專人專管比較好。”我們在設計類的時候,就應該遵循這個單一職責原則。

??? 記得有人比喻過軟件開發、設計原則、設計模式之間的關系就是戰爭、戰略和戰術的關系,關于設計模式實際上是設計原則的具體應用,以后我們還會講到這一點。另外,大家都很熟悉計算器的例子,很多的人都愿意以此為例,我們也以計算器編程為例說明單一職責原則:
??? 在有些人眼里,計算器就是一件東西,是一個整體,所以它把這個需求進行了抽象,最終設計為一個Calculator類,代碼如下:

class Calculator{
? public String calculate() {

??? Console.Write("Please input the first number:");
??? String strNum1 = Console.ReadLine();
?
??? Console.Write(Please input the operator:");
??? String strOpr= Console.ReadLine();

??? Console.Write("Please input the second number:");
??? String strNum2 = Console.ReadLine();

??? String strResult = "";
??? if (strOpr == "+"){
????? strResult = Convert.ToString(Convert.ToDouble(strNum1) + Convert.ToDouble(strNum2));
??? }
??? else if (strOpr == "-"){
????? strResult = Convert.ToString(Convert.ToDouble(strNum1) - Convert.ToDouble(strNum2));
??? }
??? else if (strOpr == "*"){
????? strResult = Convert.ToString(Convert.ToDouble(strNum1) * Convert.ToDouble(strNum2));
??? }
??? else if (strOpr == "/"){
????? strResult = Convert.ToString(Convert.ToDouble(strNum1) / Convert.ToDouble(strNum2));
??? }

??? Console.WriteLine("The result is " + strResult);
? }????
}

?

另外,還有一部分人認為:計算器是一個外殼和一個處理器的組合。

class Appearance{
? public int displayInput(String &strNum1,String &strOpr, String &strNum2) {
??? Console.Write("Please input the first number:");
??? strNum1 = Console.ReadLine();
???
??? Console.Write(Please input the operator:");
??? strOpr= Console.ReadLine();

?

??? Console.Write("Please input the second number:");
??? strNum2 = Console.ReadLine();

?

??? return 0;
? }

? public String displayOutput(String strResult) {
??? Console.WriteLine("The result is " + strResult);
? }
}

?

class Processor{
? public String calculate(String strNum1,String strOpr, String strNum2){
??? String strResult = "";
??? if (strOpr == "+"){
????? strResult = Convert.ToString(Convert.ToDouble(strNum1) + Convert.ToDouble(strNum2));
??? }
??? else if (strOpr == "-"){
????? strResult = Convert.ToString(Convert.ToDouble(strNum1) - Convert.ToDouble(strNum2));
??? }
??? else if (strOpr == "*"){
????? strResult = Convert.ToString(Convert.ToDouble(strNum1) * Convert.ToDouble(strNum2));
??? }
??? else if (strOpr == "/"){
????? strResult = Convert.ToString(Convert.ToDouble(strNum1) / Convert.ToDouble(strNum2));
??? }
??? return strResult;
? }
}

為什么這么做呢?因為外殼和處理器是兩個職責,是兩件事情,而且都是很容易發生需求變動的因素,所以把它們放到一個類中,違背了單一職責原則。
??? 比如,用戶可能對計算器提出以下要求:
??? 第一,目前已經實現了“加法”、“減法”、“乘法”和“除法”,以后還可能出現“乘方”、“開方”等很多運算。
??? 第二,現在人機界面太簡單了,還可能做個Windows計算器風格的界面或者Mac計算器風格的界面。
所以,把一個類Calculator 拆分為兩個類Appearance和Processor,一個類做一件事情,這樣更容易應對需求變化。如果界面需要修改,那么就去修改Appearance類;如果處理器需要修改,那么就去修改Processor類。

?

??? 我們再舉一個郵件的例子。我們平常收到的郵件內容,看起來是一封信,實際上內部有兩部分組成:郵件頭和郵件體。電子郵件的編碼要求符合RFC822標準。
第一種設計方式是這樣:
interface IEmail {
??? public void setSender(String sender);
??? public void setReceiver(String receiver);
??? public void setContent(String content);
}

class Email implements IEmail {?
??? public void setSender(String sender) {// set sender; }?
??? public void setReceiver(String receiver) {// set receiver; }?
??? public void setContent(String content) {// set content; }
}

這個設計是有問題的,因為郵件頭和郵件體都有變化的可能性。
1、郵件頭的每一個域的編碼,可能是BASE64,也可能是QP,而且域的數量也不固定。
2、郵件體中封裝的郵件內容可能是PlainText類型,也可能是HTML類型,甚至于流媒體。
所謂第一種設計方式違背了單一職責原則,里面封裝了兩種可能引起變化的原因。
我們依照單一職責原則,對其進行改進后,變為第二種設計方式:
interface IEmail {
? public void setSender(String sender);
? public void setReceiver(String receiver);
? public void setContent(IContent content);
}

interface IContent {
? public String getAsString();
}

class Email implements IEmail {
? public void setSender(String sender) {// set sender; }?
? public void setReceiver(String receiver) {// set receiver; }?
? public void setContent(IContent content) {// set content; }
}

有的資料把單一職責解釋為:“僅有一個引起它變化的原因”。這個解釋跟“專注于做一件事”是等價的。如果一個類同時做兩件事情,那么這兩件事情都有可能引起它的變化。同樣的道理,如果僅有一個引起它變化的原因,那么這個類也就只能做一件事情。

2.2?單一職責原則的使用
???單一職責原則的尺度如何掌握?我們怎么能知道該拆分還是不應該拆分呢?原則很簡單:需求決定。如果你所需要的計算器,永遠都沒有外觀和處理器變動的可能性,那么就應該把它抽象為一個整體的計算器;如果你所需要的計算器,外殼和處理器都有可能發生變動,那么就必須把它拆離為外殼和處理器。
單一職責原則實際上是把相同的職責進行了聚合,避免把相同的職責分散到不同的類之中,這樣就可以控制變化,把變化限制在一個地方,防止因為一個地方的變動,引起更多地方的變動的“漣漪效應”,單一職責原則避免一個類承擔過多的職責。單一職責原則不是說一個類就只有一個方法,而是具有單一功能。
??? 我們在使用單一職責原則的時候,牢記以下幾點:
A、一個設計合理的類,應該僅有一個可以引起它變化的原因,即單一職責,如果有多個原因可以引起它的變化,就必須進行分離;
B、在沒有需求變化征兆的情況下,應用單一職責原則或其他原則是不明智的,因為這樣會使系統變得很復雜,系統將會變成一堆細小的顆粒組成,純屬于沒事找抽;
C、在需求能夠預計或實際發生變化時,就應該使用單一職責原則來重構代碼,有經驗的設計師、架構師對可能出現的需求變化很敏感,設計上就會具有一定的前瞻性。

?-------------------------------------------------------------

后記:最近看了一個“現場說法”的電視節目,著實有意思。說是最近有兩個偷車大盜被我警方抓獲。這倆大盜都是賊中高手,非常了得,不過,他們卻有著不同的成長路線。
????其中一個大盜,苦心鉆研開鎖技術,專門去香港學習先進技術,前后花了一百多萬,非常舍得投資,回來后屢屢得手。另一個大盜,就比較狡猾,整天到商場的停車場,跟隨著寶馬、奔馳的車主,在車主購物的時候,伺機偷去車鑰匙,然后從停車場把車開走,案發的時候案值達到了千萬。呵呵,看來干什么事,都得找到關鍵所在。


架構師之路(6)---OOD的開閉原則

2?開閉原則(Open-Closed Principle,OCP)


2.1?什么是開閉原則
??? 開閉原則是面向對象設計中“可復用設計”的基石,是面向對象設計中最重要的原則之一,其它很多的設計原則都是實現開閉原則的一種手段。


??? 1988年,Bertrand Meyer在他的著作《Object Oriented Software Construction》中提出了開閉原則,它的原文是這樣:“Software entities should be open for extension,but closed for modification”。翻譯過來就是:“軟件實體應當對擴展開放,對修改關閉”。這句話說得略微有點專業,我們把它講得更通俗一點,也就是:軟件系統中包含的各種組件,例如模塊(Modules)、類(Classes)以及功能(Functions)等等,應該在不修改現有代碼的基礎上,引入新功能。開閉原則中“開”,是指對于組件功能的擴展是開放的,是允許對其進行功能擴展的;開閉原則中“閉”,是指對于原有代碼的修改是封閉的,即不應該修改原有的代碼。


2.2?如何實現開閉原則
??? 實現開閉原則的關鍵就在于“抽象”。把系統的所有可能的行為抽象成一個抽象底層,這個抽象底層規定出所有的具體實現必須提供的方法的特征。作為系統設計的抽象層,要預見所有可能的擴展,從而使得在任何擴展情況下,系統的抽象底層不需修改;同時,由于可以從抽象底層導出一個或多個新的具體實現,可以改變系統的行為,因此系統設計對擴展是開放的。


??? 我們在軟件開發的過程中,一直都是提倡需求導向的。這就要求我們在設計的時候,要非常清楚地了解用戶需求,判斷需求中包含的可能的變化,從而明確在什么情況下使用開閉原則。


??? 關于系統可變的部分,還有一個更具體的對可變性封裝原則(Principle of Encapsulation of Variation,? EVP),它從軟件工程實現的角度對開閉原則進行了進一步的解釋。EVP要求在做系統設計的時候,對系統所有可能發生變化的部分進行評估和分類,每一個可變的因素都單獨進行封裝。


??? 我們在實際開發過程的設計開始階段,就要羅列出來系統所有可能的行為,并把這些行為加入到抽象底層,根本就是不可能的,這么去做也是不經濟的,費時費力。另外,在設計開始階段,對所有的可變因素進行預計和封裝也不太現實,也是很難做得到。所以,開閉原則描繪的愿景只是一種理想情況或是極端狀態,現實世界中是很難被完全實現的。我們只能在某些組件,在某種程度上符合開閉原則的要求。


??? 通過以上的分析,對于開閉原則,我們可以得出這樣的結論:雖然我們不可能做到百分之百的封閉,但是在系統設計的時候,我們還是要盡量做到這一點。


??? 對于軟件系統的功能擴展,我們可以通過繼承、重載或者委托等手段實現。以接口為例,它對修改就是是封閉的,而對具體的實現是開放的,我們可以根據實際的需要提供不同的實現,所以接口是符合開閉原則的。

?


2.3?開閉原則能夠帶來什么好處
??? 如果一個軟件系統符合開閉原則的,那么從軟件工程的角度來看,它至少具有這樣的好處:


??可復用性好。

??? 我們可以在軟件完成以后,仍然可以對軟件進行擴展,加入新的功能,非常靈活。因此,這個軟件系統就可以通過不斷地增加新的組件,來滿足不斷變化的需求。


??可維護性好。

??? 由于對于已有的軟件系統的組件,特別是它的抽象底層不去修改,因此,我們不用擔心軟件系統中原有組件的穩定性,這就使變化中的軟件系統有一定的穩定性和延續性。


2.4?開閉原則與其它原則的關系
??? 開閉原則具有理想主義的色彩,它是面向對象設計的終極目標。因此,針對開閉原則的實現方法,一直都有面向對象設計的大師費盡心機,研究開閉原則的實現方式。后面要提到的里氏代換原則(LSP)、依賴倒轉原則(DIP)、接口隔離原則(ISP)以及抽象類(Abstract Class)、接口(Interace)等等,都可以看作是開閉原則的實現方法。

架構師之路(7)---里氏代換原則

4?里氏代換原則(Liskov Substitution Principle, LSP)


4.1?什么是里氏代換原則

??? 里氏代換原則是由麻省理工學院(MIT)計算機科學實驗室的Liskov女士,在1987年的OOPSLA大會上發表的一篇文章《Data Abstraction and Hierarchy》里面提出來的,主要闡述了有關繼承的一些原則,也就是什么時候應該使用繼承,什么時候不應該使用繼承,以及其中的蘊涵的原理。2002年,我們前面單一職責原則中提到的軟件工程大師Robert C. Martin,出版了一本《Agile Software Development Principles Patterns and Practices》,在文中他把里氏代換原則最終簡化為一句話:“Subtypes must be substitutable for their base types”。也就是,子類必須能夠替換成它們的基類。
??? 我們把里氏代換原則解釋得更完整一些:在一個軟件系統中,子類應該可以替換任何基類能夠出現的地方,并且經過替換以后,代碼還能正常工作。

4.2?第一個例子:正方形不是長方形
??? “正方形不是長方形”是一個理解里氏代換原則的最經典的例子。在數學領域里,正方形毫無疑問是長方形,它是一個長寬相等的長方形。所以,我們開發的一個與幾何圖形相關的軟件系統中,讓正方形繼承自長方形是順利成章的事情。現在,我們截取該系統的一個代碼片段進行分析:
長方形類Rectangle:
class Rectangle {
? double length;
? double width;
? public double getLength() { return length; }
? public void setLength(double height) { this.length = length; }??
? public double getWidth() { return width; }
? public void setWidth(double width) { this.width = width; }
}
正方形類Square:
class Square extends Rectangle {
? public void setWidth(double width) {
??? super.setLength(width);
??? super.setWidth(width);??
?}
? public void setLength(double length) {
??? super.setLength(length);
??? super.setWidth(length);??
? }
}
??? 由于正方形的度和寬度必須相等,所以在方法setLength和setWidth中,對長度和寬度賦值相同。類TestRectangle是我們的軟件系統中的一個組件,它有一個resize方法要用到基類Rectangle,resize方法的功能是模擬長方形寬度逐步增長的效果:
? 測試類TestRectangle:
class TestRectangle {
? public void resize(Rectangle objRect) {
??? while(objRect.getWidth() <= objRect.getLength()? ) {
??????? objRect.setWidth(? objRect.getWidth () + 1 );
??? }
? }
}
??? 我們運行一下這段代碼就會發現,假如我們把一個普通長方形作為參數傳入resize方法,就會看到長方形寬度逐漸增長的效果,當寬度大于長度,代碼就會停止,這種行為的結果符合我們的預期;假如我們再把一個正方形作為參數傳入resize方法后,就會看到正方形的寬度和長度都在不斷增長,代碼會一直運行下去,直至系統產生溢出錯誤。所以,普通的長方形是適合這段代碼的,正方形不適合。
??? 我們得出結論:在resize方法中,Rectangle類型的參數是不能被Square類型的參數所代替,如果進行了替換就得不到預期結果。因此,Square類和Rectangle類之間的繼承關系違反了里氏代換原則,它們之間的繼承關系不成立,正方形不是長方形。

4.3?第二個例子:鴕鳥不是鳥
??? “鴕鳥非鳥”也是一個理解里氏代換原則的經典的例子。“鴕鳥非鳥”的另一個版本是“企鵝非鳥”,這兩種說法本質上沒有區別,前提條件都是這種鳥不會飛。生物學中對于鳥類的定義:“恒溫動物,卵生,全身披有羽毛,身體呈流線形,有角質的喙,眼在頭的兩側。前肢退化成翼,后肢有鱗狀外皮,有四趾”。所以,從生物學角度來看,鴕鳥肯定是一種鳥。
我們設計一個與鳥有關的系統,鴕鳥類順理成章地由鳥類派生,鳥類所有的特性和行為都被鴕鳥類繼承。大多數的鳥類在人們的印象中都是會飛的,所以,我們給鳥類設計了一個名字為fly的方法,還給出了與飛行相關的一些屬性,比如飛行速度(velocity)。
? 鳥類Bird:
class Bird {
?? double velocity;
?? public fly() { //I am flying; };

?? public setVelocity(double velocity) { this.velocity = velocity; };
?? public getVelocity() { return this.velocity; };
}
??? 鴕鳥不會飛怎么辦?我們就讓它扇扇翅膀表示一下吧,在fly方法里什么都不做。至于它的飛行速度,不會飛就只能設定為0了,于是我們就有了鴕鳥類的設計。
?? 鴕鳥類Ostrich:
class Ostrich extends Bird {
??? public fly() { //I do nothing; };
??? public setVelocity(double velocity) { this.velocity = 0; };
?? public getVelocity() { return 0; };
}
??? 好了,所有的類都設計完成,我們把類Bird提供給了其它的代碼(消費者)使用。現在,消費者使用Bird類完成這樣一個需求:計算鳥飛越黃河所需的時間。
??? 對于Bird類的消費者而言,它只看到了Bird類中有fly和getVelocity兩個方法,至于里面的實現細節,它不關心,而且也無需關心,于是給出了實現代碼:
?? 測試類TestBird:
class TestBird {
?? public calcFlyTime(Bird bird) {
?? try{
???? double riverWidth = 3000;
???? System.out.println(riverWidth / bird.getVelocity());
?? }catch(Exception err){
???? System.out.println("An error occured!");
?? }
?? };
}
??? 如果我們拿一種飛鳥來測試這段代碼,沒有問題,結果正確,符合我們的預期,系統輸出了飛鳥飛越黃河的所需要的時間;如果我們再拿鴕鳥來測試這段代碼,結果代碼發生了系統除零的異常,明顯不符合我們的預期。
??? 對于TestBird類而言,它只是Bird類的一個消費者,它在使用Bird類的時候,只需要根據Bird類提供的方法進行相應的使用,根本不會關心鴕鳥會不會飛這樣的問題,而且也無須知道。它就是要按照“所需時間 = 黃河的寬度 / 鳥的飛行速度”的規則來計算鳥飛越黃河所需要的時間。
??? 我們得出結論:在calcFlyTime方法中,Bird類型的參數是不能被Ostrich類型的參數所代替,如果進行了替換就得不到預期結果。因此,Ostrich類和Bird類之間的繼承關系違反了里氏代換原則,它們之間的繼承關系不成立,鴕鳥不是鳥。


4.4?鴕鳥到底是不是鳥?
??? “鴕鳥到底是不是鳥”,鴕鳥是鳥也不是鳥,這個結論似乎就是個悖論。產生這種混亂有兩方面的原因:
原因一:對類的繼承關系的定義沒有搞清楚。
??? 面向對象的設計關注的是對象的行為,它是使用“行為”來對對象進行分類的,只有行為一致的對象才能抽象出一個類來。我經常說類的繼承關系就是一種“Is-A”關系,實際上指的是行為上的“Is-A”關系,可以把它描述為“Act-As”。關于類的繼承的細節,我們可以單獨再講。
??? 我們再來看“正方形不是長方形”這個例子,正方形在設置長度和寬度這兩個行為上,與長方形顯然是不同的。長方形的行為:設置長方形的長度的時候,它的寬度保持不變,設置寬度的時候,長度保持不變。正方形的行為:設置正方形的長度的時候,寬度隨之改變;設置寬度的時候,長度隨之改變。所以,如果我們把這種行為加到基類長方形的時候,就導致了正方形無法繼承這種行為。我們“強行”把正方形從長方形繼承過來,就造成無法達到預期的結果。
??? “鴕鳥非鳥”基本上也是同樣的道理。我們一講到鳥,就認為它能飛,有的鳥確實能飛,但不是所有的鳥都能飛。問題就是出在這里。如果以“飛”的行為作為衡量“鳥”的標準的話,鴕鳥顯然不是鳥;如果按照生物學的劃分標準:有翅膀、有羽毛等特性作為衡量“鳥”的標準的話,鴕鳥理所當然就是鳥了。鴕鳥沒有“飛”的行為,我們強行給它加上了這個行為,所以在面對“飛越黃河”的需求時,代碼就會出現運行期故障。


原因二:設計要依賴于用戶要求和具體環境。
??? 繼承關系要求子類要具有基類全部的行為。這里的行為是指落在需求范圍內的行為。圖中鳥類具有4個對外的行為,其中2個行為分別落在A和B系統需求中:

?


系統需求和對象關系示意圖


??? A需求期望鳥類提供與飛翔有關的行為,即使鴕鳥跟普通的鳥在外觀上就是100%的相像,但在A需求范圍內,鴕鳥在飛翔這一點上跟其它普通的鳥是不一致的,它沒有這個能力,所以,鴕鳥類無法從鳥類派生,鴕鳥不是鳥。
??? B需求期望鳥類提供與羽毛有關的行為,那么鴕鳥在這一點上跟其它普通的鳥一致的。雖然它不會飛,但是這一點不在B需求范圍內,所以,它具備了鳥類全部的行為特征,鴕鳥類就能夠從鳥類派生,鴕鳥就是鳥。

??? 所有派生類的行為功能必須和使用者對其基類的期望保持一致,如果派生類達不到這一點,那么必然違反里氏替換原則。在實際的開發過程中,不正確的派生關系是非常有害的。伴隨著軟件開發規模的擴大,參與的開發人員也越來越多,每個人都在使用別人提供的組件,也會為別人提供組件。最終,所有人的開發的組件經過層層包裝和不斷組合,被集成為一個完整的系統。每個開發人員在使用別人的組件時,只需知道組件的對外裸露的接口,那就是它全部行為的集合,至于內部到底是怎么實現的,無法知道,也無須知道。所以,對于使用者而言,它只能通過接口實現自己的預期,如果組件接口提供的行為與使用者的預期不符,錯誤便產生了。里氏代換原則就是在設計時避免出現派生類與基類不一致的行為。

4.5?如何正確地運用里氏代換原則
?? 里氏代換原則目的就是要保證繼承關系的正確性。我們在實際的項目中,是不是對于每一個繼承關系都得費這么大勁去斟酌?不需要,大多數情況下按照“Is-A”去設計繼承關系是沒有問題的,只有極少的情況下,需要你仔細處理一下,這類情況對于有點開發經驗的人,一般都會覺察到,是有規律可循的。最典型的就是使用者的代碼中必須包含依據子類類型執行相應的動作的代碼:
動物類Animal:
public class Animal{
? String name;
? public Animal(String name) {
??? this.name = name;
?}
? public void printName(){
? try{
???? System.out.println("I am a " + name + "!");
??}catch(Exception err){
???? System.out.println("An error occured!");
??}
}
}
貓類Cat:
public class Cat extends Animal{
? public Cat(String name){
??? super(name);
? }
? public void Mew(){
??try{
?????? System.out.println("Mew~~~ ");
??}catch(Exception err){
?????? System.out.println("An error occured!");
??}
?}
}
狗類Dog:
public class Dog extends Animal {
? public Dog(String name) {
??? super(name);
?}
?public void Bark(){
?try{
???? System.out.println("Bark~~~ ");
?}catch(Exception err){
???? System.out.println("An error occured!");
?}
}
}
測試類:TestAnimal
public class TestAnimal {
???public void TestLSP(Animal animal){
???? if (animal instanceof Cat ){
???????? Cat cat = (Cat)animal;
???????? cat.printName();
???????? cat.Mew();
???? }
???? if (animal instanceof Dog ){

?????? Dog dog = (Dog)animal;
?????? dog.printName();
?????? dog.Bark();
???? }
?}
}
??? 象這種代碼是明顯不符合里氏代換原則的,它給使用者使用造成很大的麻煩,甚至無法使用,對于以后的維護和擴展帶來巨大的隱患。實現開閉原則的關鍵步驟是抽象化,基類與子類之間的繼承關系就是一種抽象化的體現。因此,里氏代換原則是實現抽象化的一種規范。違反里氏代換原則意味著違反了開閉原則,反之未必。里氏代換原則是使代碼符合開閉原則的一個重要保證。

??? 我們常見這樣的代碼,至少我以前的Java和php項目中就出現過。比如有一個網頁,要實現對于客戶資料的查看、增加、修改、刪除功能,一般Server端對應的處理類中都有這么一段:
if(action.Equals(“add”)){
? //do add action
}
else if(action.Equals(“view”)){
? //do view action
}
else if(action.Equals(“delete”)){
? //do delete action
}
else if(action.Equals(“modify”)){
? //do modify action
}
?? 大家都很熟悉吧,其實這是違背里氏代換原則的,結果就是可維護性和可擴展性會變差。有人說:我這么用,效果好像不錯,干嘛講究那么多呢,實現需求是第一位的。另外,這種寫法看起來很很直觀的,有利于維護。其實,每個人所處的環境不同,對具體問題的理解不同,難免局限在自己的領域內思考問題。對于這個說法,我覺得應該這么解釋:作為一個設計原則,是人們經過很多的項目實踐,最終提煉出來的指導性的內容。如果對于你的項目來講,顯著增加了工作量和復雜度,那我覺得適度的違反并不為過。做任何事情都是個度的問題,過猶不及都不好。在大中型的項目中,是一定要講究軟件工程的思想,講究規范和流程的,否則人員協作和后期維護將會是非常困難的。對于小型的項目可能相應的要簡化很多,可能取決于時間、資源、商業等各種因素,但是多從軟件工程的角度去思考問題,對于系統的健壯性、可維護性等性能指標的提高是非常有益的。像生命周期只有一個月的系統,你還去考慮一大堆原則,除非腦袋被驢踢了。
??? 實現開閉原則的關鍵步驟是抽象化,基類與子類之間的繼承關系就是一種抽象化的體現。因此,里氏代換原則是實現抽象化的一種規范。違反里氏代換原則意味著違反了開閉原則,反之未必。里氏代換原則是使代碼符合開閉原則的一個重要保證。

通過里氏代換原則給我們帶來了什么樣的啟示?
??? 類的繼承原則:如果一個繼承類的對象可能會在基類出現的地方出現運行錯誤,則該子類不應該從該基類繼承,或者說,應該重新設計它們之間的關系。
??? 動作正確性保證:符合里氏代換原則的類擴展不會給已有的系統引入新的錯誤。


架構師之路(8)---IoC框架


1?IoC理論的背景
??? 我們都知道在面向對象的應用中,軟件系統都是由N個對象組成的,它們通過彼此的合作,最終實現業務邏輯。


?
圖1:耦合在一起的對象


???如果我們打開機械式手表的后蓋,就會看到與上面類似的情形,各個齒輪分別帶動時針、分針和秒針順時針旋轉,從而在表盤上產生正確的時間。上圖畫的就是這樣的一個齒輪組,它擁有多個獨立的齒輪,這些齒輪相互嚙合在一起,協同工作,來共同完成某項任務。我們可以看到,在齒輪組中,如果有一個齒輪出了問題,就可能會影響到整個齒輪組的運轉。


???齒輪組中各個齒輪之間的嚙合關系,與軟件系統中對象與對象之間的耦合關系,非常類似。對象之間的耦合關系是必要的,是協同工作的基礎,當然也是無法避免的,否則無法保證系統整體的正常運轉。目前,很多工業級的應用越來越龐大,對象之間的依賴關系也越來越復雜,就會出現對象之間的多重依賴性關系,因此,架構師和設計師對系統進行分析和設計將面臨很大的挑戰。對象之間耦合度過高的系統,必然會出現牽一發而動全身的情形。

?

?
圖2:對象之間復雜的依賴關系


??? 耦合關系不僅會出現在對象與對象之間,也會出現在軟件系統的各模塊之間,以及軟件系統和硬件系統之間。如何降低系統之間、模塊之間和對象之間的耦合度,是軟件工程永遠追求的目標之一。
??? 所以有人就提出來IOC理論,用來實現對象之間的“解耦”,目前已被廣泛應用于很多項目中。


2?什么是控制反轉(IoC)
??? IoC是Inversion of Control的縮寫,多數書籍翻譯成“控制反轉”,還有些書籍翻譯成為“控制反向”或者“控制倒置”,這些都大同小異,我個人覺得這個翻譯有待商榷,容易引起歧義,是不是翻譯為 “控制轉移”會更好一些。
???1996年,Michael Mattson在一篇有關探討面向對象框架的文章中,首先提出了IoC這個概念。對于面向對象設計及編程的基本思想,前面我們已經講了很多了,不再贅述,讀者可以參考我前面的文章,簡單來說就是把復雜系統分解成相互合作的對象,這些對象類的內部實現是透明的,從而降低了解決問題的復雜度,而且可以靈活地被重用和擴展。IoC理論提出的觀點大體是這樣的:借助于“第三方”實現具有依賴關系的對象之間的解耦,如下圖:

?


?圖3:IoC解耦示意圖


???大家看到了吧,由于引進了中間的“第三方”,也就是IoC容器,使得A、B、C、D這4個對象沒有了耦合關系,齒輪之間的傳動全部依靠“第三方”了,所有對象的控制權全部上繳給“第三方”,這就是“控制反轉”說法的由來,意思就是各個對象的控制權都被轉移給“第三方”了。
??? 從另一個角度來看,作為“第三方”的IoC容器成了整個系統的關鍵核心,它起到了一種類似“粘合劑”的作用,把系統中的所有對象粘合在一起發揮作用,如果沒有這個“粘合劑”,對象與對象之間會彼此失去聯系,這就是所謂的Ioc容器被稱為“粘合劑”的原因。
??? 我們再把上圖中間的Ioc容器拿掉后,整個系統變為這樣的情形:


圖4:拿掉IoC容器后的系統


???拿掉IoC容器后,我們看到的就是系統開發所需要完成的全部內容,這時候,A、B、C、D這4個對象之間已經沒有了耦合關系,彼此毫不影響,所以當你在實現ClassA的時候,根本不用再考慮B、C和D了,系統對象之間的依賴已經降低到了最低程度。至于IoC容器,你可以到開源組織的網站上找一找,里面有很多比較成熟而且Free的,使用起來非常簡便。
如果真能實現控制反轉,對于系統開發而言,這將是一件多么美好的事情!

?

3?什么是依賴注入(DI)
??? 我們先看一些生活中的例子,幫助你理解依賴注入(DI):

3.1?主機和內置硬盤
??? 我們平時所用的電腦,它的硬盤安裝在主機里面,從電腦的外部,我們是看不見硬盤的。所以,我們通常認為,電腦的所有部件是融為一體的。


圖5:主機和內置硬盤


???對于一體機而言,一旦出現了問題,我們可能無法準確地判斷到底是什么零部件出現了問題,有可能是CPU壞了,也有可能是主板燒了,還有可能是內存松動了。還有的時候,比如,電腦硬盤出現了問題,可能導致整臺電腦都無法使用。從這個例子,我們可以看到部件之間“緊密耦合”的產生的問題:無法準確的定位和診斷故障所在。這種情形,在軟件工程的理論中,稱之為可理解性和可測試性差。


??? 如果你想修理電腦的硬盤,那么在修理過程中就必須小心翼翼,不要把其它的部件再搞壞了,比如不慎把內存給碰松動了,硬盤固然是修好了,但整臺電腦仍然無法使用。這種情形,在軟件工程的理論中,稱之為可修改性差。
可理解性、可測試性、可修改性組成了系統的可維護性,一體機的可維護性就表現得比較差。

?

3.2?主機和USB設備
??? 大家對USB接口和設備應該都很熟悉。自從有了USB接口,給我們使用電腦帶來了很大的方便,現在有很多的外部設備都支持USB接口。


圖6:主機和USB設備

?

??? 從軟件工程角度,我們分析一下USB帶來的好處:
1、USB設備作為主機的外部設備,在插入主機之前,與主機沒有任何的關系,兩者都可獨立進行測試,無論兩者中的任何一方出現什么的問題,都不會影響另一方的運行,所以可維護性比較好。
2、同一個USB設備可以插接到不同的支持USB的任何主機,也就是USB設備可以被重復利用,所以可復用性比較好。
3、支持熱插拔,只要是支持USB接口的設備都可以接入,所以可擴展性比較好,非常靈活。


3.3?依賴注入
???2004年,MartinFowler從另一個角度來思考這個問題,提出了“哪些方面的控制被反轉了?”這樣一個問題,并給出了答案:“依賴對象的獲得被反轉”。于是,他給“控制反轉”取了一個他認為更合適的名字叫做“依賴注入(DependencyInjection)”。他的這個答案,實際上點明了實現IoC理論的解決方法。所謂依賴注入,就是由IoC容器在運行期間,動態地將某種依賴關系注入到對象之中。


??? 依賴注入(DI)和控制反轉(IoC)是從不同的角度的描述的同一件事情,都是指通過引入第三方,即IoC容器,實現軟件系統中對象之間的解耦。


??? 控制反轉能夠帶給系統開發的好處,與USB機制帶來的好處基本類似,而且依賴注入的實現跟USB機制也完全一樣。USB機制是現實中依賴注入的很好的案例。我們用一個實際的例子,分析一下USB機制:


任務:主機通過USB接口讀取一個文件。
思路:首先,必須制定一個USB接口標準,主機對USB設備的訪問嚴格按照USB接口標準,USB設備提供的功能也必須符合USB接口標準。
??? 當主機需要獲取一個文件的時候,它直接去讀取USB接口,根本不會關心USB接口上連接的是什么設備。
如果我給主機連接上一個U盤,那么主機就從U盤上讀取文件;如果我給主機連接上一個外接硬盤,那么主機就從外接硬盤上讀取文件。選取何種外部設備的權力由我說了算,也就是控制權歸我。
至此,依賴注入的思路已經非常清楚:當主機需要讀取文件的時候,我就把它所要依賴的外部設備,挑出來一個,幫他掛接上。這個過程就是一個被依賴的對象在系統運行時被注入另外一個對象內部的過程。在這個過程中,我就起到了IoC容器的作用。


??? 我們再把依賴注入應用到軟件工程中:
??? ClassA依賴于Class B,當Class A需要用到Class B的時候,IoC容器就會立刻創建一個Class B送給ClassA使用。IoC容器就是一個類制造工廠,你需要什么,直接來拿,直接用就可以了,而不需要去關心你所用的東西是如何制成的,也不用關心最后是怎么被銷毀的,這一切全由IoC容器包辦。

?

? 4?實現IoC容器

?----------------------------------------------------

后記:之所以突然跳躍到39,是因為有的同學基礎比較好,已經沒有必要閱讀有關面向對象、設計模式以及軟件工程的基本理論,那么可以從這里開始閱讀。基礎需要繼續補全的同學,可以從4繼續看,我會定期在兩個方向進行更新。框架理論,是架構師知識體系中非常重要的部分,我會逐步結合實例,把常見的一些框架方面的知識與大家共享。


總結

以上是生活随笔為你收集整理的架构师之路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久天天躁狠狠躁夜夜免费观看 | www国产亚洲精品久久久日本 | 黄网在线观看免费网站 | 永久免费观看美女裸体的网站 | 亚洲日韩一区二区三区 | 夜精品a片一区二区三区无码白浆 | 国产猛烈高潮尖叫视频免费 | 亚洲欧美日韩国产精品一区二区 | 婷婷六月久久综合丁香 | 日日麻批免费40分钟无码 | 熟妇女人妻丰满少妇中文字幕 | 久久伊人色av天堂九九小黄鸭 | 亚洲娇小与黑人巨大交 | 黑人大群体交免费视频 | 无码精品国产va在线观看dvd | 精品国产一区二区三区av 性色 | 亚洲日本va中文字幕 | 国产69精品久久久久app下载 | 成人片黄网站色大片免费观看 | 日韩成人一区二区三区在线观看 | 99久久亚洲精品无码毛片 | 国产精品毛多多水多 | 国产免费久久久久久无码 | 日欧一片内射va在线影院 | 99久久久无码国产精品免费 | a片免费视频在线观看 | 国产av无码专区亚洲awww | 99久久精品无码一区二区毛片 | 精品少妇爆乳无码av无码专区 | 中文字幕 亚洲精品 第1页 | 中文字幕人妻无码一区二区三区 | 国产精品18久久久久久麻辣 | 国产精品自产拍在线观看 | 国产亚洲精品久久久久久大师 | 久久亚洲中文字幕精品一区 | 欧美丰满熟妇xxxx性ppx人交 | 国产99久久精品一区二区 | 欧美日本免费一区二区三区 | 国产精品国产自线拍免费软件 | 天堂久久天堂av色综合 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲天堂2017无码中文 | 天堂无码人妻精品一区二区三区 | 亚洲色偷偷偷综合网 | 野外少妇愉情中文字幕 | 国产美女极度色诱视频www | 老太婆性杂交欧美肥老太 | 久久久久久久女国产乱让韩 | 日本va欧美va欧美va精品 | 最近中文2019字幕第二页 | 大屁股大乳丰满人妻 | 青草视频在线播放 | 伦伦影院午夜理论片 | 东京热男人av天堂 | 岛国片人妻三上悠亚 | 男女爱爱好爽视频免费看 | 黑人巨大精品欧美一区二区 | 久久99精品国产麻豆蜜芽 | 亚洲欧美色中文字幕在线 | 久久久久av无码免费网 | 女人被爽到呻吟gif动态图视看 | 国产亚洲欧美在线专区 | 国产农村乱对白刺激视频 | 成人无码精品一区二区三区 | 国产一区二区不卡老阿姨 | 欧美亚洲日韩国产人成在线播放 | 精品无人国产偷自产在线 | 精品国产福利一区二区 | 精品aⅴ一区二区三区 | 亚洲日韩一区二区 | 久久精品人人做人人综合试看 | 我要看www免费看插插视频 | 亚洲精品一区三区三区在线观看 | 国产黑色丝袜在线播放 | 亚洲中文字幕无码中字 | 2020久久超碰国产精品最新 | 人妻互换免费中文字幕 | 高清不卡一区二区三区 | 国产亚洲欧美在线专区 | 欧美 丝袜 自拍 制服 另类 | 成人女人看片免费视频放人 | 国产网红无码精品视频 | 午夜精品久久久久久久 | 色一情一乱一伦一区二区三欧美 | 377p欧洲日本亚洲大胆 | 欧美人与牲动交xxxx | 少妇性l交大片欧洲热妇乱xxx | 色综合久久久久综合一本到桃花网 | 色综合久久88色综合天天 | 日韩欧美群交p片內射中文 | 成人精品视频一区二区 | 性欧美牲交xxxxx视频 | 亚洲熟熟妇xxxx | 2020久久香蕉国产线看观看 | 曰本女人与公拘交酡免费视频 | 国产美女精品一区二区三区 | 国产极品美女高潮无套在线观看 | 精品国产一区av天美传媒 | 日本熟妇人妻xxxxx人hd | 日本va欧美va欧美va精品 | 国产精品人人爽人人做我的可爱 | 四虎影视成人永久免费观看视频 | 午夜福利试看120秒体验区 | 99精品无人区乱码1区2区3区 | 国内综合精品午夜久久资源 | 丰满少妇熟乱xxxxx视频 | 亚洲乱亚洲乱妇50p | 一本无码人妻在中文字幕免费 | 天天摸天天碰天天添 | 3d动漫精品啪啪一区二区中 | 色综合久久88色综合天天 | 波多野结衣乳巨码无在线观看 | 亚洲精品成人福利网站 | 国产av人人夜夜澡人人爽麻豆 | 国产成人午夜福利在线播放 | 18精品久久久无码午夜福利 | 国产高潮视频在线观看 | 欧美高清在线精品一区 | 亚洲色www成人永久网址 | 久久久久亚洲精品男人的天堂 | 久久久无码中文字幕久... | 亚洲国产高清在线观看视频 | 色一情一乱一伦一视频免费看 | 理论片87福利理论电影 | 香蕉久久久久久av成人 | 精品国产一区二区三区四区在线看 | 日本精品人妻无码77777 天堂一区人妻无码 | 人妻互换免费中文字幕 | 日韩人妻无码一区二区三区久久99 | 亚洲の无码国产の无码步美 | www成人国产高清内射 | 日韩亚洲欧美精品综合 | 免费男性肉肉影院 | 西西人体www44rt大胆高清 | 九九热爱视频精品 | 中文字幕无码免费久久99 | 午夜福利不卡在线视频 | 中文字幕av日韩精品一区二区 | 一本一道久久综合久久 | 女人被爽到呻吟gif动态图视看 | 亚无码乱人伦一区二区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产精品久久久久7777 | av无码久久久久不卡免费网站 | 成年女人永久免费看片 | 精品国产aⅴ无码一区二区 | 桃花色综合影院 | 日本一区二区三区免费播放 | 国产激情一区二区三区 | 无码人妻出轨黑人中文字幕 | 久久精品中文字幕大胸 | 无码任你躁久久久久久久 | 强开小婷嫩苞又嫩又紧视频 | 国产午夜手机精彩视频 | 无码人妻丰满熟妇区五十路百度 | 黑人玩弄人妻中文在线 | 久久国产精品二国产精品 | 免费人成在线视频无码 | 国产猛烈高潮尖叫视频免费 | 三级4级全黄60分钟 | 99riav国产精品视频 | 精品无码一区二区三区爱欲 | 亚拍精品一区二区三区探花 | 学生妹亚洲一区二区 | 亚洲 欧美 激情 小说 另类 | 色综合久久网 | 欧美自拍另类欧美综合图片区 | 亚洲gv猛男gv无码男同 | 无码吃奶揉捏奶头高潮视频 | 亚洲男人av香蕉爽爽爽爽 | 亚洲国产精品一区二区美利坚 | 亚洲国产日韩a在线播放 | 中文字幕无码免费久久99 | 国产性生大片免费观看性 | 少妇性l交大片欧洲热妇乱xxx | 日本护士毛茸茸高潮 | 露脸叫床粗话东北少妇 | 中文字幕亚洲情99在线 | 欧美老妇交乱视频在线观看 | 精品国产一区二区三区av 性色 | 日日干夜夜干 | 亚洲最大成人网站 | 乱人伦人妻中文字幕无码久久网 | 无套内谢的新婚少妇国语播放 | 欧洲欧美人成视频在线 | 在线а√天堂中文官网 | 精品日本一区二区三区在线观看 | 亚洲天堂2017无码中文 | 国产精品办公室沙发 | 亚洲成av人片天堂网无码】 | 免费无码肉片在线观看 | 亚洲欧洲日本综合aⅴ在线 | 国产精品亚洲综合色区韩国 | 色婷婷综合中文久久一本 | 国产办公室秘书无码精品99 | 国产精品福利视频导航 | 成人精品天堂一区二区三区 | 在线观看国产午夜福利片 | 日本精品高清一区二区 | 日日橹狠狠爱欧美视频 | 好屌草这里只有精品 | 激情内射亚州一区二区三区爱妻 | 夫妻免费无码v看片 | 国产在线精品一区二区三区直播 | 大乳丰满人妻中文字幕日本 | 亚洲国产精品毛片av不卡在线 | 亚洲国产精华液网站w | 人人爽人人澡人人高潮 | 熟女体下毛毛黑森林 | 亚洲欧美精品伊人久久 | 欧美阿v高清资源不卡在线播放 | 国产97人人超碰caoprom | 久久亚洲国产成人精品性色 | 乱码午夜-极国产极内射 | 成人免费视频一区二区 | 亚洲第一无码av无码专区 | 天天燥日日燥 | 国产av一区二区三区最新精品 | 亚洲 高清 成人 动漫 | 欧美怡红院免费全部视频 | 色综合天天综合狠狠爱 | 999久久久国产精品消防器材 | 亚洲成a人片在线观看无码3d | 亚洲一区二区三区无码久久 | 国产尤物精品视频 | 亚洲性无码av中文字幕 | 国产午夜亚洲精品不卡 | 伊人久久大香线蕉亚洲 | 国产 浪潮av性色四虎 | 国产精品美女久久久 | 日韩av无码一区二区三区不卡 | 人妻插b视频一区二区三区 | 国产乱码精品一品二品 | 青青久在线视频免费观看 | 欧美一区二区三区 | 久久久久国色av免费观看性色 | 丰满诱人的人妻3 | 中文字幕无码人妻少妇免费 | 日本熟妇人妻xxxxx人hd | 欧美性猛交xxxx富婆 | 亚洲男人av香蕉爽爽爽爽 | 日韩 欧美 动漫 国产 制服 | 狠狠亚洲超碰狼人久久 | 人妻互换免费中文字幕 | 无码成人精品区在线观看 | 亚洲欧美日韩成人高清在线一区 | 人妻体内射精一区二区三四 | 内射爽无广熟女亚洲 | 中文字幕av日韩精品一区二区 | 久久97精品久久久久久久不卡 | 熟女俱乐部五十路六十路av | 九月婷婷人人澡人人添人人爽 | 性史性农村dvd毛片 | 中文字幕乱码人妻二区三区 | 人妻aⅴ无码一区二区三区 | 国产成人无码一二三区视频 | 国产精品美女久久久 | 天天摸天天碰天天添 | 日本熟妇人妻xxxxx人hd | 亚洲乱码国产乱码精品精 | 国产精品久久久久7777 | 黑森林福利视频导航 | 亚洲一区二区三区播放 | 国产另类ts人妖一区二区 | 国产精品资源一区二区 | 成人精品一区二区三区中文字幕 | 国产精品怡红院永久免费 | 人人澡人人透人人爽 | 中文毛片无遮挡高清免费 | 精品国精品国产自在久国产87 | 娇妻被黑人粗大高潮白浆 | 天天躁夜夜躁狠狠是什么心态 | aa片在线观看视频在线播放 | 欧美人与物videos另类 | 日本一卡二卡不卡视频查询 | 亚洲国产av美女网站 | 精品无码一区二区三区爱欲 | 国产后入清纯学生妹 | 国产精品亚洲一区二区三区喷水 | 日本熟妇乱子伦xxxx | 性欧美大战久久久久久久 | 亚洲人成网站在线播放942 | 自拍偷自拍亚洲精品10p | 老司机亚洲精品影院无码 | 天天躁日日躁狠狠躁免费麻豆 | av无码电影一区二区三区 | 国产无av码在线观看 | 欧美午夜特黄aaaaaa片 | 岛国片人妻三上悠亚 | 久久国产精品_国产精品 | 国产一区二区三区四区五区加勒比 | 综合激情五月综合激情五月激情1 | 久久综合香蕉国产蜜臀av | 国产农村妇女高潮大叫 | 日韩精品成人一区二区三区 | 久久久久国色av免费观看性色 | 一本久道久久综合婷婷五月 | 人人超人人超碰超国产 | 人人澡人人透人人爽 | 久久精品人妻少妇一区二区三区 | 欧美丰满老熟妇xxxxx性 | 麻豆精品国产精华精华液好用吗 | 图片小说视频一区二区 | 日日摸日日碰夜夜爽av | 精品无码一区二区三区爱欲 | 国产午夜福利100集发布 | 亚洲va中文字幕无码久久不卡 | 亚洲精品一区三区三区在线观看 | 日本高清一区免费中文视频 | 少妇厨房愉情理9仑片视频 | 久久久www成人免费毛片 | a片在线免费观看 | 高清国产亚洲精品自在久久 | 思思久久99热只有频精品66 | 狠狠色丁香久久婷婷综合五月 | 大地资源中文第3页 | 激情国产av做激情国产爱 | 久久精品女人天堂av免费观看 | 天天躁夜夜躁狠狠是什么心态 | 亚洲高清偷拍一区二区三区 | 日韩欧美成人免费观看 | 无码精品人妻一区二区三区av | 午夜无码人妻av大片色欲 | 中文字幕乱妇无码av在线 | 国产精品亚洲五月天高清 | 亚洲精品无码人妻无码 | 中文字幕日韩精品一区二区三区 | 久久精品中文字幕一区 | 日本护士xxxxhd少妇 | 51国偷自产一区二区三区 | 国产精品亚洲五月天高清 | 精品人妻人人做人人爽夜夜爽 | 欧洲极品少妇 | 丰满护士巨好爽好大乳 | 美女张开腿让人桶 | 国产精品99久久精品爆乳 | 精品国产福利一区二区 | 77777熟女视频在线观看 а天堂中文在线官网 | 久久久久人妻一区精品色欧美 | 国产婷婷色一区二区三区在线 | 日韩在线不卡免费视频一区 | 日韩少妇内射免费播放 | 青青草原综合久久大伊人精品 | 成熟妇人a片免费看网站 | 久久久久亚洲精品中文字幕 | 好男人www社区 | 亚洲国产高清在线观看视频 | 成人片黄网站色大片免费观看 | 亚洲熟女一区二区三区 | 国产精品无码久久av | 一本一道久久综合久久 | 国产熟妇高潮叫床视频播放 | 亚洲成a人片在线观看无码 | 国产成人午夜福利在线播放 | 成人一区二区免费视频 | 一本久道高清无码视频 | 国产成人无码专区 | 欧美丰满老熟妇xxxxx性 | 精品国产一区av天美传媒 | 国产成人午夜福利在线播放 | 亚洲区欧美区综合区自拍区 | 久久婷婷五月综合色国产香蕉 | 国产精品.xx视频.xxtv | 国内老熟妇对白xxxxhd | 亚洲一区二区三区含羞草 | 丰满妇女强制高潮18xxxx | 色妞www精品免费视频 | 伊人久久婷婷五月综合97色 | 性做久久久久久久免费看 | www国产精品内射老师 | 精品国产av色一区二区深夜久久 | 人妻与老人中文字幕 | 中文字幕乱码中文乱码51精品 | 久久精品无码一区二区三区 | 精品无码国产自产拍在线观看蜜 | 国产精品亚洲专区无码不卡 | 荫蒂被男人添的好舒服爽免费视频 | 国产成人无码一二三区视频 | 欧美日韩色另类综合 | 精品日本一区二区三区在线观看 | 精品熟女少妇av免费观看 | 亚洲熟妇色xxxxx欧美老妇y | 亚洲日韩中文字幕在线播放 | 欧美熟妇另类久久久久久多毛 | 国产精品igao视频网 | 无码人妻精品一区二区三区下载 | 国产色视频一区二区三区 | 欧美日本免费一区二区三区 | 丰满少妇女裸体bbw | 国产无遮挡又黄又爽免费视频 | 午夜无码人妻av大片色欲 | 国产猛烈高潮尖叫视频免费 | 亚洲爆乳大丰满无码专区 | 亚洲人成网站免费播放 | 国产精品久久久一区二区三区 | 亚洲男女内射在线播放 | 亚洲色欲色欲欲www在线 | 成人欧美一区二区三区黑人 | aⅴ在线视频男人的天堂 | 国产精品va在线播放 | 亚洲va中文字幕无码久久不卡 | 国色天香社区在线视频 | 中文字幕av伊人av无码av | 国内综合精品午夜久久资源 | 国产一区二区三区精品视频 | 亚洲国产一区二区三区在线观看 | 午夜福利不卡在线视频 | 亚洲欧美日韩国产精品一区二区 | 中文字幕av日韩精品一区二区 | 亚洲精品久久久久avwww潮水 | 对白脏话肉麻粗话av | av在线亚洲欧洲日产一区二区 | 国产内射爽爽大片视频社区在线 | 国内精品久久毛片一区二区 | 国产精品无码一区二区三区不卡 | 天堂亚洲2017在线观看 | 亚洲の无码国产の无码影院 | 好屌草这里只有精品 | 国产在线无码精品电影网 | 又紧又大又爽精品一区二区 | 国产一区二区三区日韩精品 | 日本一区二区三区免费高清 | 亚洲成a人片在线观看无码 | 兔费看少妇性l交大片免费 | 午夜福利试看120秒体验区 | 亚洲日韩av一区二区三区中文 | 日韩人妻无码一区二区三区久久99 | 亚洲成a人一区二区三区 | 高清无码午夜福利视频 | 正在播放东北夫妻内射 | 亚洲色在线无码国产精品不卡 | 人妻天天爽夜夜爽一区二区 | 丰满少妇人妻久久久久久 | 国产va免费精品观看 | 成人精品视频一区二区三区尤物 | 一本大道久久东京热无码av | 午夜性刺激在线视频免费 | 奇米影视7777久久精品 | 亚洲国产精品久久久天堂 | 97精品人妻一区二区三区香蕉 | 国产精品18久久久久久麻辣 | 亚洲无人区午夜福利码高清完整版 | 天天综合网天天综合色 | 香蕉久久久久久av成人 | 中文无码成人免费视频在线观看 | 亚洲精品一区三区三区在线观看 | 欧美日本免费一区二区三区 | 亚洲无人区午夜福利码高清完整版 | 国产成人一区二区三区别 | 日韩精品无码一本二本三本色 | 国产女主播喷水视频在线观看 | 亚洲精品无码人妻无码 | 色综合久久88色综合天天 | 久久久成人毛片无码 | 18无码粉嫩小泬无套在线观看 | 日日麻批免费40分钟无码 | 久久久久久国产精品无码下载 | 性欧美videos高清精品 | 夜夜影院未满十八勿进 | 曰韩少妇内射免费播放 | 日日麻批免费40分钟无码 | 亚洲成av人片天堂网无码】 | 中文字幕av日韩精品一区二区 | 一本色道久久综合狠狠躁 | 男女爱爱好爽视频免费看 | 国产精品久久国产三级国 | 在教室伦流澡到高潮hnp视频 | 久久久久免费看成人影片 | 水蜜桃色314在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 女人被男人躁得好爽免费视频 | 一本久道久久综合狠狠爱 | 白嫩日本少妇做爰 | 亚洲色无码一区二区三区 | 久久午夜无码鲁丝片秋霞 | 免费国产成人高清在线观看网站 | 亚洲 另类 在线 欧美 制服 | 精品乱码久久久久久久 | 国产成人无码午夜视频在线观看 | 亚洲人交乣女bbw | 精品久久综合1区2区3区激情 | 麻豆蜜桃av蜜臀av色欲av | 理论片87福利理论电影 | 成 人 免费观看网站 | 曰本女人与公拘交酡免费视频 | 国产明星裸体无码xxxx视频 | aⅴ在线视频男人的天堂 | 精品久久8x国产免费观看 | 四虎国产精品一区二区 | 国产精品久久国产三级国 | 久久国产精品二国产精品 | 夜夜高潮次次欢爽av女 | 国产黄在线观看免费观看不卡 | 又大又硬又爽免费视频 | 波多野结衣乳巨码无在线观看 | 欧美成人免费全部网站 | 成人亚洲精品久久久久软件 | 国产亚洲欧美在线专区 | 免费乱码人妻系列无码专区 | 天天燥日日燥 | 精品熟女少妇av免费观看 | 中文字幕人成乱码熟女app | 性欧美大战久久久久久久 | 夜先锋av资源网站 | 性欧美大战久久久久久久 | 性啪啪chinese东北女人 | 色情久久久av熟女人妻网站 | 国精产品一区二区三区 | 亚洲aⅴ无码成人网站国产app | 蜜臀av无码人妻精品 | 性色欲网站人妻丰满中文久久不卡 | 大地资源中文第3页 | 人妻有码中文字幕在线 | 中文字幕人成乱码熟女app | 色综合视频一区二区三区 | 久久伊人色av天堂九九小黄鸭 | 欧美日韩人成综合在线播放 | 成人欧美一区二区三区黑人免费 | 中文精品无码中文字幕无码专区 | 中文毛片无遮挡高清免费 | 日日橹狠狠爱欧美视频 | 国产精品亚洲五月天高清 | av香港经典三级级 在线 | 久久久中文字幕日本无吗 | 香港三级日本三级妇三级 | 1000部夫妻午夜免费 | www国产精品内射老师 | 熟女俱乐部五十路六十路av | 久久久久久久久蜜桃 | 亚洲欧美精品伊人久久 | 亚洲经典千人经典日产 | 俄罗斯老熟妇色xxxx | 久久五月精品中文字幕 | 国产av一区二区精品久久凹凸 | 超碰97人人射妻 | 国产成人亚洲综合无码 | 97夜夜澡人人双人人人喊 | 日日鲁鲁鲁夜夜爽爽狠狠 | 中文字幕乱码人妻二区三区 | 日韩精品乱码av一区二区 | 日韩精品无码一本二本三本色 | 亚洲熟妇自偷自拍另类 | 波多野结衣av一区二区全免费观看 | 四虎影视成人永久免费观看视频 | 全球成人中文在线 | 成人精品视频一区二区 | a在线观看免费网站大全 | 亚洲爆乳大丰满无码专区 | 77777熟女视频在线观看 а天堂中文在线官网 | 欧美熟妇另类久久久久久不卡 | 啦啦啦www在线观看免费视频 | 欧洲精品码一区二区三区免费看 | 日日碰狠狠丁香久燥 | 国产av一区二区精品久久凹凸 | 国产特级毛片aaaaaa高潮流水 | 狠狠cao日日穞夜夜穞av | 亚拍精品一区二区三区探花 | 福利一区二区三区视频在线观看 | 欧洲熟妇色 欧美 | 久久亚洲国产成人精品性色 | 亚洲欧美综合区丁香五月小说 | 福利一区二区三区视频在线观看 | 精品aⅴ一区二区三区 | 一本色道婷婷久久欧美 | 少妇无码av无码专区在线观看 | 日韩精品a片一区二区三区妖精 | 四虎影视成人永久免费观看视频 | 激情综合激情五月俺也去 | 国产人妻大战黑人第1集 | 99久久精品日本一区二区免费 | 欧美人与物videos另类 | 亚洲色在线无码国产精品不卡 | 999久久久国产精品消防器材 | 国产亚洲精品久久久久久国模美 | 欧美一区二区三区 | 久久久久久久久888 | 亚洲乱码日产精品bd | 内射老妇bbwx0c0ck | 97色伦图片97综合影院 | 蜜桃无码一区二区三区 | 欧美高清在线精品一区 | 亚洲中文字幕无码中文字在线 | 日本精品人妻无码免费大全 | 久久精品99久久香蕉国产色戒 | 国产精品99爱免费视频 | 伊人色综合久久天天小片 | 熟妇人妻中文av无码 | 亚洲精品综合五月久久小说 | 亚洲中文字幕无码一久久区 | 国产午夜亚洲精品不卡下载 | 综合激情五月综合激情五月激情1 | 成人免费视频视频在线观看 免费 | 国产激情综合五月久久 | 日日鲁鲁鲁夜夜爽爽狠狠 | 日韩精品一区二区av在线 | 国产精品丝袜黑色高跟鞋 | 久久99精品国产麻豆 | 超碰97人人做人人爱少妇 | 成年美女黄网站色大免费全看 | 99精品视频在线观看免费 | 狠狠色噜噜狠狠狠7777奇米 | 鲁大师影院在线观看 | 精品国产青草久久久久福利 | 88国产精品欧美一区二区三区 | 国产三级久久久精品麻豆三级 | 99在线 | 亚洲 | 色欲人妻aaaaaaa无码 | 亚洲国产精品无码久久久久高潮 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 久久综合九色综合欧美狠狠 | 搡女人真爽免费视频大全 | 亚洲国产精品美女久久久久 | 成年女人永久免费看片 | 亚洲国精产品一二二线 | 亚洲国产精品久久人人爱 | 久久成人a毛片免费观看网站 | 一本久久a久久精品亚洲 | 中文字幕日韩精品一区二区三区 | 国产高清av在线播放 | 精品人妻人人做人人爽夜夜爽 | 久久久婷婷五月亚洲97号色 | 精品一二三区久久aaa片 | 对白脏话肉麻粗话av | 一个人免费观看的www视频 | 亚洲色在线无码国产精品不卡 | 激情内射日本一区二区三区 | 无码人妻丰满熟妇区毛片18 | 欧美丰满熟妇xxxx性ppx人交 | 性色av无码免费一区二区三区 | 欧美老妇交乱视频在线观看 | 精品无码国产自产拍在线观看蜜 | 亚洲精品国偷拍自产在线观看蜜桃 | 一本无码人妻在中文字幕免费 | 日日麻批免费40分钟无码 | 精品夜夜澡人妻无码av蜜桃 | 人妻互换免费中文字幕 | 中文字幕乱码人妻二区三区 | 无码任你躁久久久久久久 | 精品无码一区二区三区爱欲 | 天天av天天av天天透 | 欧美大屁股xxxxhd黑色 | 久久久久99精品国产片 | 国产精品18久久久久久麻辣 | 少妇厨房愉情理9仑片视频 | 中文字幕乱码人妻无码久久 | 超碰97人人做人人爱少妇 | 欧美大屁股xxxxhd黑色 | 亚洲伊人久久精品影院 | 久9re热视频这里只有精品 | 人妻少妇精品视频专区 | 亚洲综合无码久久精品综合 | 在线观看国产午夜福利片 | 免费人成网站视频在线观看 | 久久综合色之久久综合 | 老子影院午夜伦不卡 | 色欲久久久天天天综合网精品 | 成人免费无码大片a毛片 | 午夜肉伦伦影院 | 捆绑白丝粉色jk震动捧喷白浆 | 人妻天天爽夜夜爽一区二区 | 欧美变态另类xxxx | 成人试看120秒体验区 | 伊人色综合久久天天小片 | 秋霞特色aa大片 | 久久综合久久自在自线精品自 | 久久综合狠狠综合久久综合88 | 国产尤物精品视频 | 午夜男女很黄的视频 | 老熟女乱子伦 | 日本丰满熟妇videos | 两性色午夜免费视频 | 国产精品美女久久久 | 国产精品免费大片 | 爽爽影院免费观看 | 国产激情无码一区二区app | 国产av人人夜夜澡人人爽麻豆 | 理论片87福利理论电影 | 性开放的女人aaa片 | 人妻有码中文字幕在线 | 国产亚洲精品久久久闺蜜 | 久久久精品国产sm最大网站 | 又色又爽又黄的美女裸体网站 | 亚洲伊人久久精品影院 | 日日夜夜撸啊撸 | 色欲人妻aaaaaaa无码 | 成熟人妻av无码专区 | 国内综合精品午夜久久资源 | 青草视频在线播放 | 中文字幕日韩精品一区二区三区 | 色狠狠av一区二区三区 | 伊在人天堂亚洲香蕉精品区 | 性欧美熟妇videofreesex | 小sao货水好多真紧h无码视频 | 极品尤物被啪到呻吟喷水 | 国产精品久久久久久无码 | 久久亚洲中文字幕精品一区 | 亚洲欧洲日本综合aⅴ在线 | 亚洲の无码国产の无码步美 | 亚洲爆乳精品无码一区二区三区 | 99久久人妻精品免费二区 | 久久无码人妻影院 | 丰满人妻一区二区三区免费视频 | 无套内射视频囯产 | 国产无遮挡吃胸膜奶免费看 | 午夜无码人妻av大片色欲 | 国产激情艳情在线看视频 | 婷婷丁香五月天综合东京热 | 欧洲欧美人成视频在线 | 日韩人妻少妇一区二区三区 | 草草网站影院白丝内射 | 国产成人无码区免费内射一片色欲 | 精品一区二区三区波多野结衣 | 亚洲人成影院在线无码按摩店 | 久久精品国产亚洲精品 | 亚洲一区二区三区无码久久 | 国产午夜视频在线观看 | 99在线 | 亚洲 | 国产精品久久久久7777 | 精品乱子伦一区二区三区 | 日本乱偷人妻中文字幕 | 狠狠色欧美亚洲狠狠色www | 国产农村乱对白刺激视频 | 欧美 日韩 亚洲 在线 | 2019午夜福利不卡片在线 | 97资源共享在线视频 | 亚洲人亚洲人成电影网站色 | 日韩成人一区二区三区在线观看 | 爽爽影院免费观看 | 亚洲自偷自偷在线制服 | 天天av天天av天天透 | 精品久久久中文字幕人妻 | 日韩av激情在线观看 | 88国产精品欧美一区二区三区 | 无码毛片视频一区二区本码 | 无码精品国产va在线观看dvd | 久久久久久久女国产乱让韩 | 131美女爱做视频 | 国产亚洲精品久久久闺蜜 | 亚洲爆乳大丰满无码专区 | 国产成人精品一区二区在线小狼 | 国产成人无码区免费内射一片色欲 | 图片小说视频一区二区 | 精品成人av一区二区三区 | 我要看www免费看插插视频 | 呦交小u女精品视频 | 爆乳一区二区三区无码 | 国产综合色产在线精品 | 国产色精品久久人妻 | 精品国产国产综合精品 | 老熟女重囗味hdxx69 | 亚洲一区二区三区无码久久 | 波多野结衣av一区二区全免费观看 | 精品无码av一区二区三区 | 天堂а√在线地址中文在线 | 国产人妻久久精品二区三区老狼 | 99久久精品无码一区二区毛片 | 久久久久99精品成人片 | 骚片av蜜桃精品一区 | 国产精品a成v人在线播放 | 国产精品国产自线拍免费软件 | 免费视频欧美无人区码 | 中文字幕色婷婷在线视频 | 婷婷五月综合缴情在线视频 | 精品国产一区二区三区四区在线看 | 特大黑人娇小亚洲女 | 日日躁夜夜躁狠狠躁 | 久久99精品久久久久久 | 乱人伦人妻中文字幕无码久久网 | 午夜理论片yy44880影院 | 蜜桃无码一区二区三区 | 国产做国产爱免费视频 | 天天做天天爱天天爽综合网 | 丰满人妻精品国产99aⅴ | 色欲久久久天天天综合网精品 | 98国产精品综合一区二区三区 | 中文字幕乱码人妻二区三区 | 熟女体下毛毛黑森林 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产精品久久久久久无码 | 国产无av码在线观看 | 樱花草在线社区www | 亚洲欧洲中文日韩av乱码 | 亚洲一区av无码专区在线观看 | 野狼第一精品社区 | 午夜精品久久久内射近拍高清 | 亚洲日韩一区二区 | 国精品人妻无码一区二区三区蜜柚 | 捆绑白丝粉色jk震动捧喷白浆 | 国产成人无码区免费内射一片色欲 | 日日碰狠狠躁久久躁蜜桃 | 国产一区二区三区精品视频 | 国产色xx群视频射精 | 久久久www成人免费毛片 | 日本高清一区免费中文视频 | 精品乱子伦一区二区三区 | 亚洲色欲色欲天天天www | 九九久久精品国产免费看小说 | 人妻少妇精品无码专区动漫 | 欧美国产日韩久久mv | 国产在线aaa片一区二区99 | 国产午夜福利100集发布 | 无人区乱码一区二区三区 | 午夜精品久久久内射近拍高清 | 欧美老妇与禽交 | 亚洲精品综合一区二区三区在线 | 水蜜桃色314在线观看 | 久久综合九色综合欧美狠狠 | 97se亚洲精品一区 | 97夜夜澡人人双人人人喊 | 伊人久久大香线蕉av一区二区 | 色婷婷综合激情综在线播放 | 中文字幕无码视频专区 | 麻豆果冻传媒2021精品传媒一区下载 | 国产乱人伦av在线无码 | 色情久久久av熟女人妻网站 | 色一情一乱一伦一视频免费看 | 999久久久国产精品消防器材 | 国产色xx群视频射精 | 婷婷综合久久中文字幕蜜桃三电影 | 桃花色综合影院 | 久久久久国色av免费观看性色 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产精品毛多多水多 | 欧美xxxxx精品 | 中文字幕人妻无码一夲道 | 亚洲综合无码一区二区三区 | 综合人妻久久一区二区精品 | 国产精品igao视频网 | 伊人久久大香线蕉午夜 | 亚洲gv猛男gv无码男同 | 亚洲精品一区二区三区婷婷月 | 51国偷自产一区二区三区 | 亚洲毛片av日韩av无码 | 日产国产精品亚洲系列 | 亚洲一区二区三区无码久久 | 又粗又大又硬又长又爽 | 欧美精品无码一区二区三区 | 欧美性生交xxxxx久久久 | 丝袜 中出 制服 人妻 美腿 | 男人和女人高潮免费网站 | 偷窥日本少妇撒尿chinese | 日韩av激情在线观看 | 99在线 | 亚洲 | 欧美丰满少妇xxxx性 | 无码帝国www无码专区色综合 | 国产精品久久久久久无码 | 国产 精品 自在自线 | 中国女人内谢69xxxxxa片 | 撕开奶罩揉吮奶头视频 | 风流少妇按摩来高潮 | 男女猛烈xx00免费视频试看 | 双乳奶水饱满少妇呻吟 | 欧美第一黄网免费网站 | 午夜精品一区二区三区的区别 | 国产乱子伦视频在线播放 | 国产真实夫妇视频 | 久久久国产精品无码免费专区 | 久久久久久久女国产乱让韩 | 日本护士xxxxhd少妇 | 国产熟女一区二区三区四区五区 | 婷婷丁香五月天综合东京热 | 丰满少妇熟乱xxxxx视频 | 好男人www社区 | 小泽玛莉亚一区二区视频在线 | 久久成人a毛片免费观看网站 | 人人妻人人澡人人爽人人精品 | 男女爱爱好爽视频免费看 | 无码人妻精品一区二区三区不卡 | 377p欧洲日本亚洲大胆 | 欧美刺激性大交 | 无遮无挡爽爽免费视频 | 精品国产一区二区三区四区 | 玩弄少妇高潮ⅹxxxyw | 亚洲小说图区综合在线 | 对白脏话肉麻粗话av | 亚洲国产精华液网站w | 久久精品女人天堂av免费观看 | 国产精品国产三级国产专播 | 日韩人妻系列无码专区 | 国内精品九九久久久精品 | 少妇被粗大的猛进出69影院 | 日韩欧美中文字幕公布 | 未满成年国产在线观看 | 久久成人a毛片免费观看网站 | 亚洲欧洲日本综合aⅴ在线 | 曰本女人与公拘交酡免费视频 | 国产国产精品人在线视 | 97久久精品无码一区二区 | 激情五月综合色婷婷一区二区 | 丝袜 中出 制服 人妻 美腿 | 欧美熟妇另类久久久久久不卡 | 少妇厨房愉情理9仑片视频 | 久久综合给久久狠狠97色 | 精品国精品国产自在久国产87 | 久久久久99精品成人片 | 中文无码伦av中文字幕 | 红桃av一区二区三区在线无码av | 国产精品无码一区二区三区不卡 | 999久久久国产精品消防器材 | 国产成人精品必看 | 九九综合va免费看 | 国产真实伦对白全集 | 国产精品免费大片 | 波多野结衣高清一区二区三区 | 中文字幕无码人妻少妇免费 | 久久伊人色av天堂九九小黄鸭 | 黑人巨大精品欧美一区二区 | 色欲久久久天天天综合网精品 | 亚洲欧美中文字幕5发布 | 人妻天天爽夜夜爽一区二区 | 精品国产麻豆免费人成网站 | 欧美熟妇另类久久久久久多毛 | 亚洲日韩av一区二区三区四区 | 扒开双腿疯狂进出爽爽爽视频 | 精品欧洲av无码一区二区三区 | 国内老熟妇对白xxxxhd | 无遮无挡爽爽免费视频 | 亚洲中文字幕乱码av波多ji | 色欲av亚洲一区无码少妇 | 精品日本一区二区三区在线观看 | 午夜无码区在线观看 | 中文字幕无码热在线视频 | 黑人玩弄人妻中文在线 | 天天躁日日躁狠狠躁免费麻豆 | 日本熟妇浓毛 | аⅴ资源天堂资源库在线 | 激情五月综合色婷婷一区二区 | 在线播放免费人成毛片乱码 | 全球成人中文在线 | 无码国产乱人伦偷精品视频 | 丰满少妇弄高潮了www | 亚洲精品国偷拍自产在线观看蜜桃 | а天堂中文在线官网 | 波多野结衣av一区二区全免费观看 | 蜜臀aⅴ国产精品久久久国产老师 | 久久精品丝袜高跟鞋 | 精品乱子伦一区二区三区 | 中国女人内谢69xxxx | 免费无码肉片在线观看 | 国产美女精品一区二区三区 | 久久久久久av无码免费看大片 | 亚洲第一网站男人都懂 | 亚洲日本一区二区三区在线 | 欧美熟妇另类久久久久久多毛 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 激情人妻另类人妻伦 | 国产在线无码精品电影网 | 丰满少妇高潮惨叫视频 | 国产精品久久久久久久9999 | 秋霞成人午夜鲁丝一区二区三区 | 女人和拘做爰正片视频 | 无码av免费一区二区三区试看 | 国产精品va在线观看无码 | 亚洲熟悉妇女xxx妇女av | аⅴ资源天堂资源库在线 | 国产偷自视频区视频 | 国产香蕉97碰碰久久人人 | 久久99精品国产麻豆蜜芽 | 亚洲成av人综合在线观看 | 亚洲自偷精品视频自拍 | 精品国偷自产在线 | 欧美丰满熟妇xxxx性ppx人交 | 老司机亚洲精品影院无码 | 荫蒂添的好舒服视频囗交 | 性生交片免费无码看人 | 日韩人妻无码一区二区三区久久99 | 国产激情综合五月久久 | 偷窥日本少妇撒尿chinese | 国语精品一区二区三区 | 亚洲精品国产精品乱码不卡 | 国产亚洲欧美日韩亚洲中文色 | 欧美性色19p | 亚洲色www成人永久网址 | 亚洲a无码综合a国产av中文 | 国产偷抇久久精品a片69 | 国产九九九九九九九a片 | 天堂久久天堂av色综合 | 九九久久精品国产免费看小说 | 无码精品人妻一区二区三区av | 波多野结衣av一区二区全免费观看 | 午夜福利试看120秒体验区 | 老熟妇仑乱视频一区二区 | 国产另类ts人妖一区二区 | 性色欲网站人妻丰满中文久久不卡 | 亚洲中文字幕无码中文字在线 | 成熟人妻av无码专区 | 国产成人精品久久亚洲高清不卡 | 全球成人中文在线 | av无码不卡在线观看免费 | 中文字幕人妻丝袜二区 | 波多野42部无码喷潮在线 | 久久久久亚洲精品中文字幕 | 日本免费一区二区三区最新 | 最新国产乱人伦偷精品免费网站 | 午夜福利一区二区三区在线观看 | 无码国产乱人伦偷精品视频 | 久久久久成人片免费观看蜜芽 | 久久国产36精品色熟妇 | 人妻天天爽夜夜爽一区二区 | 纯爱无遮挡h肉动漫在线播放 | 国产精品办公室沙发 | 亚洲成a人片在线观看日本 | 国产午夜精品一区二区三区嫩草 | 亚洲一区二区三区播放 | 少妇愉情理伦片bd | 天天摸天天碰天天添 | 亚洲中文字幕久久无码 | 一本久道久久综合狠狠爱 | 国产成人精品久久亚洲高清不卡 | 免费无码av一区二区 | 国内精品人妻无码久久久影院 | 亚洲成色www久久网站 | 啦啦啦www在线观看免费视频 | 亚洲人成网站在线播放942 | 午夜熟女插插xx免费视频 | 久久久久久av无码免费看大片 | 国产综合在线观看 | 亚洲天堂2017无码中文 | 国产福利视频一区二区 | 狂野欧美性猛xxxx乱大交 | 丰满少妇弄高潮了www | 天下第一社区视频www日本 | 樱花草在线播放免费中文 | 300部国产真实乱 | 自拍偷自拍亚洲精品被多人伦好爽 | 欧美老熟妇乱xxxxx | 国产人妻久久精品二区三区老狼 | 欧美喷潮久久久xxxxx | 中国女人内谢69xxxx | 性欧美videos高清精品 | 国产免费无码一区二区视频 | 国産精品久久久久久久 | 精品亚洲成av人在线观看 | 伊人色综合久久天天小片 | 久久精品国产一区二区三区 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 久久精品一区二区三区四区 | 爱做久久久久久 | 1000部啪啪未满十八勿入下载 | 久久人人爽人人爽人人片ⅴ | 欧美野外疯狂做受xxxx高潮 | 国产精品美女久久久网av | 国产色视频一区二区三区 | 亚洲精品国偷拍自产在线麻豆 | 综合网日日天干夜夜久久 | 亚洲成av人综合在线观看 | 黑人大群体交免费视频 | 99久久人妻精品免费二区 | 欧美成人家庭影院 | 国产 精品 自在自线 | 久久99精品久久久久久动态图 | 久久久久亚洲精品男人的天堂 | 奇米影视7777久久精品 | 日韩精品a片一区二区三区妖精 | 国产亚av手机在线观看 | 精品亚洲韩国一区二区三区 | 成人精品一区二区三区中文字幕 | 国产精品久久久久久久9999 | 三级4级全黄60分钟 | 免费视频欧美无人区码 | 亚洲自偷精品视频自拍 | 久久精品人妻少妇一区二区三区 | 国产精品香蕉在线观看 | 麻豆国产人妻欲求不满 | 小泽玛莉亚一区二区视频在线 | 久久久中文字幕日本无吗 | 成人三级无码视频在线观看 | 亚洲区小说区激情区图片区 | 国产香蕉尹人综合在线观看 | 无码人妻久久一区二区三区不卡 | 中文字幕无码av激情不卡 | 亚洲一区av无码专区在线观看 | 国产99久久精品一区二区 | 国产精品美女久久久 | 精品人妻人人做人人爽夜夜爽 | 婷婷丁香五月天综合东京热 | 免费中文字幕日韩欧美 | 日韩精品a片一区二区三区妖精 | 无码av最新清无码专区吞精 | 内射白嫩少妇超碰 | 国产成人无码av在线影院 | 精品国精品国产自在久国产87 | 久久无码专区国产精品s | 特级做a爰片毛片免费69 | 无码人妻久久一区二区三区不卡 | 国产亚洲精品久久久久久大师 | 人人妻人人澡人人爽欧美一区 | 亚洲中文字幕va福利 | 成人影院yy111111在线观看 | 国产精品久免费的黄网站 | 久久99精品久久久久婷婷 | 曰本女人与公拘交酡免费视频 | 日本熟妇人妻xxxxx人hd | 丰满少妇弄高潮了www | 久久人人爽人人爽人人片ⅴ | 婷婷丁香五月天综合东京热 | 成人精品视频一区二区 | 成人免费视频视频在线观看 免费 | 中文字幕人妻无码一区二区三区 | www国产亚洲精品久久网站 | 午夜理论片yy44880影院 | а√资源新版在线天堂 | 国产亚洲精品久久久ai换 | www成人国产高清内射 | 成人aaa片一区国产精品 | 亚洲国产精品久久人人爱 | 男女猛烈xx00免费视频试看 | 色综合久久久久综合一本到桃花网 | 色窝窝无码一区二区三区色欲 | aⅴ亚洲 日韩 色 图网站 播放 | 男女性色大片免费网站 | 三级4级全黄60分钟 | 在线观看欧美一区二区三区 | 亚洲 另类 在线 欧美 制服 | 中文字幕+乱码+中文字幕一区 | 色婷婷综合激情综在线播放 | 亚洲欧洲无卡二区视頻 | 久久婷婷五月综合色国产香蕉 | 中文字幕av伊人av无码av | 婷婷六月久久综合丁香 | 激情综合激情五月俺也去 | 国产精品鲁鲁鲁 | 色欲久久久天天天综合网精品 | 无码av岛国片在线播放 | 久久久久久a亚洲欧洲av冫 | 熟妇人妻激情偷爽文 | 天堂а√在线地址中文在线 | 少妇无套内谢久久久久 | 久久久中文字幕日本无吗 | 亚洲国产综合无码一区 | 妺妺窝人体色www婷婷 | 国精品人妻无码一区二区三区蜜柚 | 国产精品亚洲专区无码不卡 | 久久久无码中文字幕久... | 精品国产一区二区三区四区在线看 | 性生交大片免费看女人按摩摩 | 99久久人妻精品免费一区 | 日本熟妇大屁股人妻 | 老头边吃奶边弄进去呻吟 | 麻豆人妻少妇精品无码专区 | 亚洲一区二区观看播放 | 男人的天堂av网站 | 亚洲午夜无码久久 | 日日麻批免费40分钟无码 | 欧美老人巨大xxxx做受 | 亚洲日韩av一区二区三区中文 | 两性色午夜视频免费播放 | 荡女精品导航 | 任你躁在线精品免费 | 无码国产乱人伦偷精品视频 | 亚洲欧洲中文日韩av乱码 | 精品国产青草久久久久福利 | 成人无码视频免费播放 | 亚洲男人av香蕉爽爽爽爽 | 大地资源中文第3页 | 欧美精品国产综合久久 | 国产人成高清在线视频99最全资源 | 国产精品亚洲а∨无码播放麻豆 | 精品偷拍一区二区三区在线看 | 欧美国产亚洲日韩在线二区 | 玩弄中年熟妇正在播放 | 国产成人无码区免费内射一片色欲 | 国产高清av在线播放 | 日日碰狠狠丁香久燥 | 中文字幕中文有码在线 | 欧洲极品少妇 | 丝袜 中出 制服 人妻 美腿 | 亚洲小说图区综合在线 | 亚洲热妇无码av在线播放 | 又色又爽又黄的美女裸体网站 | 亚拍精品一区二区三区探花 | 中文字幕人成乱码熟女app | 久久99精品国产麻豆蜜芽 | 成人欧美一区二区三区黑人免费 | 亚洲人交乣女bbw | 亚洲人亚洲人成电影网站色 | 国产又粗又硬又大爽黄老大爷视 | 国产区女主播在线观看 | 亚洲成色www久久网站 | 免费人成在线视频无码 | 丰满岳乱妇在线观看中字无码 | 国产精品二区一区二区aⅴ污介绍 | 午夜无码人妻av大片色欲 | 高潮毛片无遮挡高清免费 | 天下第一社区视频www日本 | 蜜臀av无码人妻精品 | 日本一区二区更新不卡 | 国产激情无码一区二区 | 国内精品九九久久久精品 | 午夜嘿嘿嘿影院 | 午夜精品久久久久久久 | 亚洲精品国产a久久久久久 | 欧洲极品少妇 | 欧美兽交xxxx×视频 | 玩弄中年熟妇正在播放 | 澳门永久av免费网站 | 丰满少妇熟乱xxxxx视频 | 性生交大片免费看l | 成人三级无码视频在线观看 | 午夜精品久久久久久久 | 国产精品嫩草久久久久 | 亚洲精品无码人妻无码 | 老子影院午夜精品无码 | 人人妻人人藻人人爽欧美一区 | 欧美乱妇无乱码大黄a片 | 免费人成在线观看网站 | 人人妻人人澡人人爽人人精品浪潮 | 无码播放一区二区三区 | 荫蒂添的好舒服视频囗交 | 中文字幕乱码人妻无码久久 | 精品久久久无码人妻字幂 | 国产成人一区二区三区别 | 红桃av一区二区三区在线无码av | 少妇性俱乐部纵欲狂欢电影 | 欧美丰满老熟妇xxxxx性 | 久久亚洲精品中文字幕无男同 | 男女作爱免费网站 | 色综合久久久无码网中文 | 久久99热只有频精品8 | 中文毛片无遮挡高清免费 | 国内精品人妻无码久久久影院蜜桃 | 国产日产欧产精品精品app | 国产美女极度色诱视频www | 亚洲理论电影在线观看 | 久久 国产 尿 小便 嘘嘘 | 色偷偷人人澡人人爽人人模 | 精品日本一区二区三区在线观看 | 亚洲一区二区三区国产精华液 | 青草视频在线播放 | 亚洲中文字幕无码中字 | 国产又爽又黄又刺激的视频 | 真人与拘做受免费视频一 | 青春草在线视频免费观看 | 久久久国产一区二区三区 | 亚洲高清偷拍一区二区三区 | 色老头在线一区二区三区 | 国产亚洲精品久久久闺蜜 | 久久久国产精品无码免费专区 | 真人与拘做受免费视频一 | 色欲av亚洲一区无码少妇 | 性欧美牲交xxxxx视频 | 国产精品美女久久久网av | 免费乱码人妻系列无码专区 | 午夜肉伦伦影院 | 国产精品二区一区二区aⅴ污介绍 | 曰韩少妇内射免费播放 | 中文字幕无线码 | 精品国产青草久久久久福利 | 性色欲网站人妻丰满中文久久不卡 | 国产尤物精品视频 | 欧美丰满少妇xxxx性 | 久久人人爽人人爽人人片av高清 | 一本色道久久综合亚洲精品不卡 | 999久久久国产精品消防器材 | 无码纯肉视频在线观看 | 国产在线无码精品电影网 | 国内精品人妻无码久久久影院 | 亚洲色欲色欲天天天www | 国产精品香蕉在线观看 | 精品国产乱码久久久久乱码 | 精品国产青草久久久久福利 | 久久亚洲精品成人无码 | 少妇激情av一区二区 | 欧美 日韩 亚洲 在线 | 亚洲熟熟妇xxxx | 性生交大片免费看l | 欧美亚洲国产一区二区三区 | 国产真实乱对白精彩久久 | 超碰97人人做人人爱少妇 | 熟妇人妻无码xxx视频 | 日本精品久久久久中文字幕 | 人妻体内射精一区二区三四 | 娇妻被黑人粗大高潮白浆 | 中文字幕av伊人av无码av | 少女韩国电视剧在线观看完整 | 黑人巨大精品欧美黑寡妇 | 欧美刺激性大交 | 蜜桃无码一区二区三区 | 色五月五月丁香亚洲综合网 | 亚洲精品美女久久久久久久 | 国产在线精品一区二区三区直播 | 伊人久久大香线蕉av一区二区 | 性做久久久久久久免费看 | 亚洲中文字幕在线观看 | 无遮挡啪啪摇乳动态图 | 色婷婷久久一区二区三区麻豆 | 欧美性黑人极品hd | 日韩亚洲欧美精品综合 | 亚洲精品美女久久久久久久 | 国产精品美女久久久 | 国产激情无码一区二区 | www国产亚洲精品久久网站 | 人妻无码久久精品人妻 | 永久免费精品精品永久-夜色 | 色偷偷人人澡人人爽人人模 | 黑人巨大精品欧美一区二区 | 三级4级全黄60分钟 | 中文精品无码中文字幕无码专区 | 在线а√天堂中文官网 | 爆乳一区二区三区无码 | 色窝窝无码一区二区三区色欲 | 99久久99久久免费精品蜜桃 | 久久久精品国产sm最大网站 | 国内揄拍国内精品少妇国语 | 无码国产乱人伦偷精品视频 | 一本大道伊人av久久综合 | 日本精品人妻无码77777 天堂一区人妻无码 | 在线成人www免费观看视频 | 无码国产乱人伦偷精品视频 | 日韩人妻无码一区二区三区久久99 | 性欧美大战久久久久久久 | 国产亚洲欧美日韩亚洲中文色 | 国产疯狂伦交大片 | 高中生自慰www网站 | 老熟妇乱子伦牲交视频 | 丰满少妇弄高潮了www | 婷婷六月久久综合丁香 | 99久久人妻精品免费二区 | 未满成年国产在线观看 | 丰满少妇弄高潮了www | 一本久久伊人热热精品中文字幕 | 国产97色在线 | 免 | 中文字幕无码人妻少妇免费 | 精品一区二区三区无码免费视频 | 丰满人妻被黑人猛烈进入 | 欧美野外疯狂做受xxxx高潮 | 狂野欧美性猛xxxx乱大交 | 国产亚洲精品久久久闺蜜 | 婷婷五月综合缴情在线视频 | 少妇被粗大的猛进出69影院 | 久精品国产欧美亚洲色aⅴ大片 | 精品国产一区二区三区av 性色 | 欧美精品一区二区精品久久 | 无码免费一区二区三区 | 成人精品天堂一区二区三区 | 国产精品久久久久久久9999 | 国产尤物精品视频 | 久久国产精品萌白酱免费 | 亚洲自偷自偷在线制服 | 亚洲国产午夜精品理论片 | 老熟女乱子伦 | 在线播放亚洲第一字幕 | 国产人妻精品午夜福利免费 | 亚洲一区二区三区含羞草 | 又大又硬又黄的免费视频 | 九九在线中文字幕无码 | 国精产品一区二区三区 | 日本xxxx色视频在线观看免费 | 少妇高潮一区二区三区99 | 少妇人妻偷人精品无码视频 | 日韩少妇内射免费播放 | 亚洲爆乳精品无码一区二区三区 | 国产特级毛片aaaaaa高潮流水 | 久久久久久亚洲精品a片成人 | 国内少妇偷人精品视频 | 欧美怡红院免费全部视频 | 久久这里只有精品视频9 | 麻豆精品国产精华精华液好用吗 | 久久久精品欧美一区二区免费 | 日日摸夜夜摸狠狠摸婷婷 | 国产无套粉嫩白浆在线 | 97无码免费人妻超级碰碰夜夜 | 青青青爽视频在线观看 | 内射后入在线观看一区 | 国产香蕉尹人视频在线 | 99精品久久毛片a片 | 国产女主播喷水视频在线观看 | 久久人人爽人人爽人人片ⅴ | 日韩av无码中文无码电影 | 久久国产精品萌白酱免费 | 亚洲成熟女人毛毛耸耸多 | 亚洲啪av永久无码精品放毛片 | 久久久久久av无码免费看大片 | 国产一区二区三区四区五区加勒比 | 国产国语老龄妇女a片 | 国产精品无码永久免费888 | 亚洲精品成人av在线 | 日韩精品成人一区二区三区 | 亚洲熟妇色xxxxx欧美老妇y | 国产深夜福利视频在线 | 亚洲国产精品无码一区二区三区 | 成人精品一区二区三区中文字幕 | 亚洲色在线无码国产精品不卡 | 精品国产乱码久久久久乱码 | 国产成人午夜福利在线播放 | 国产偷国产偷精品高清尤物 | 人妻有码中文字幕在线 | 中文字幕久久久久人妻 | 欧美成人家庭影院 | 狠狠综合久久久久综合网 | 国产高清av在线播放 | 国产精品资源一区二区 | 国产乱人无码伦av在线a | 精品无码成人片一区二区98 | 国产精品二区一区二区aⅴ污介绍 | 熟妇人妻中文av无码 | 欧美 日韩 人妻 高清 中文 | 国产办公室秘书无码精品99 | 99久久婷婷国产综合精品青草免费 | 丰满妇女强制高潮18xxxx | 131美女爱做视频 | 成人性做爰aaa片免费看不忠 | 漂亮人妻洗澡被公强 日日躁 | 亚洲精品国偷拍自产在线观看蜜桃 | 奇米影视7777久久精品 | 人妻少妇被猛烈进入中文字幕 | 领导边摸边吃奶边做爽在线观看 | 国产成人精品久久亚洲高清不卡 | 无码人中文字幕 | 午夜熟女插插xx免费视频 | 久久久精品人妻久久影视 | 国产成人精品必看 | 久久亚洲a片com人成 | 久久97精品久久久久久久不卡 | 久久精品中文字幕一区 | 夜夜夜高潮夜夜爽夜夜爰爰 | 欧美xxxxx精品 | 国产精品久久国产三级国 | 97精品人妻一区二区三区香蕉 | www一区二区www免费 | 国产亚洲精品久久久ai换 | 乱人伦人妻中文字幕无码久久网 | 久久精品无码一区二区三区 | 亚洲国产高清在线观看视频 | 日韩人妻系列无码专区 | 18精品久久久无码午夜福利 | 亚洲欧美国产精品专区久久 | 国产无遮挡吃胸膜奶免费看 | 乌克兰少妇xxxx做受 | 风流少妇按摩来高潮 | 久久久久99精品成人片 | 亚洲欧美日韩综合久久久 | 国产精品内射视频免费 | 夜精品a片一区二区三区无码白浆 | 欧美丰满熟妇xxxx性ppx人交 | 成人无码精品1区2区3区免费看 | 国产免费观看黄av片 | 女人被男人躁得好爽免费视频 | 日韩亚洲欧美中文高清在线 | 国产精品爱久久久久久久 | 天堂а√在线地址中文在线 | 久久久精品456亚洲影院 | 午夜无码人妻av大片色欲 | 国产综合色产在线精品 | 一区二区三区乱码在线 | 欧洲 | 亚洲自偷精品视频自拍 | 大胆欧美熟妇xx | 日韩欧美群交p片內射中文 | 久久午夜无码鲁丝片秋霞 | 天天做天天爱天天爽综合网 | 亚洲人成网站色7799 | 乌克兰少妇xxxx做受 | 亚洲一区二区三区无码久久 | 亚洲欧美日韩国产精品一区二区 | 久久亚洲精品成人无码 | 欧美性生交活xxxxxdddd | 久久久久国色av免费观看性色 | 中文字幕无码av激情不卡 | 亚洲欧美国产精品久久 | 日韩av无码一区二区三区不卡 | 亚洲精品美女久久久久久久 | 天堂久久天堂av色综合 | 亚洲欧洲无卡二区视頻 | 亚洲国产综合无码一区 | 日本精品少妇一区二区三区 | 中文久久乱码一区二区 | 天天摸天天碰天天添 | 国产人妻精品一区二区三区 | 十八禁视频网站在线观看 | 精品少妇爆乳无码av无码专区 | 国产精品99爱免费视频 | 亚洲中文字幕无码一久久区 | 99久久久国产精品无码免费 | 无码播放一区二区三区 | 人妻插b视频一区二区三区 | 欧美熟妇另类久久久久久多毛 | 亚洲国产日韩a在线播放 | 国内综合精品午夜久久资源 | 日日天干夜夜狠狠爱 | 欧美第一黄网免费网站 | 精品 日韩 国产 欧美 视频 | 亚洲色大成网站www国产 | 国产精品久久久午夜夜伦鲁鲁 | 无码福利日韩神码福利片 | aa片在线观看视频在线播放 | 亚洲国产精华液网站w | 女人被男人躁得好爽免费视频 | 亚洲欧洲日本无在线码 | 欧美激情内射喷水高潮 | 国产无套内射久久久国产 | 久久综合香蕉国产蜜臀av | 欧美日本日韩 | 国产美女极度色诱视频www | 中文字幕无码视频专区 | 国产黄在线观看免费观看不卡 | 午夜精品一区二区三区的区别 | 熟女俱乐部五十路六十路av | 国产特级毛片aaaaaa高潮流水 | 小sao货水好多真紧h无码视频 | 日本一区二区三区免费播放 | 在线欧美精品一区二区三区 | 中文字幕无码免费久久9一区9 | 欧美老人巨大xxxx做受 | 欧美日本精品一区二区三区 | 久久久精品欧美一区二区免费 | 131美女爱做视频 | 一本久久a久久精品vr综合 | 国产精品亚洲五月天高清 | 无码人妻久久一区二区三区不卡 | 国产精品igao视频网 | 日韩成人一区二区三区在线观看 | 丰满少妇人妻久久久久久 | 97夜夜澡人人双人人人喊 | 国产亚av手机在线观看 | 日欧一片内射va在线影院 | 日产国产精品亚洲系列 | 荫蒂被男人添的好舒服爽免费视频 | 99精品国产综合久久久久五月天 | 久久精品99久久香蕉国产色戒 | 成人一在线视频日韩国产 | 久久伊人色av天堂九九小黄鸭 | 亚洲中文字幕久久无码 | 97无码免费人妻超级碰碰夜夜 | 色窝窝无码一区二区三区色欲 | 亚洲区小说区激情区图片区 | 无码一区二区三区在线 | 国产成人午夜福利在线播放 | 97久久国产亚洲精品超碰热 | 国产午夜亚洲精品不卡 | 免费人成在线视频无码 | 久久综合香蕉国产蜜臀av | 亚洲午夜无码久久 | а√资源新版在线天堂 | 精品偷拍一区二区三区在线看 | 领导边摸边吃奶边做爽在线观看 | 亚洲精品国产a久久久久久 | 久久亚洲日韩精品一区二区三区 | 欧美自拍另类欧美综合图片区 | 曰本女人与公拘交酡免费视频 | 欧美性生交活xxxxxdddd | 国产三级久久久精品麻豆三级 | 亚洲欧美日韩综合久久久 | 国产精品美女久久久久av爽李琼 | 99久久人妻精品免费二区 | 亚洲色www成人永久网址 | 国产亚洲人成a在线v网站 | 少妇性l交大片欧洲热妇乱xxx | 婷婷综合久久中文字幕蜜桃三电影 | 国精产品一品二品国精品69xx | 亚洲中文字幕在线观看 | 国产午夜福利100集发布 | 少妇厨房愉情理9仑片视频 | 中文字幕日韩精品一区二区三区 | 精品少妇爆乳无码av无码专区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 天天做天天爱天天爽综合网 | 天堂久久天堂av色综合 | 亚洲熟悉妇女xxx妇女av | 精品无码av一区二区三区 | 中文字幕av无码一区二区三区电影 | 丰满人妻精品国产99aⅴ | 人人妻人人澡人人爽欧美精品 | 国产精品久久福利网站 | 欧美猛少妇色xxxxx | 在线天堂新版最新版在线8 | 曰韩少妇内射免费播放 | 夜先锋av资源网站 | 成人亚洲精品久久久久软件 | 在线a亚洲视频播放在线观看 | 激情综合激情五月俺也去 | 精品无码国产自产拍在线观看蜜 | 亚洲乱亚洲乱妇50p | 天堂亚洲免费视频 | 日本xxxx色视频在线观看免费 | 欧美怡红院免费全部视频 | 成人毛片一区二区 | 欧美 丝袜 自拍 制服 另类 | 亚洲男人av天堂午夜在 | 欧美激情一区二区三区成人 | 欧美老熟妇乱xxxxx | 无码毛片视频一区二区本码 | 色妞www精品免费视频 | 国产av久久久久精东av | 蜜臀aⅴ国产精品久久久国产老师 | 伊人久久大香线焦av综合影院 | 国产av剧情md精品麻豆 | 国产精品高潮呻吟av久久4虎 | 亚洲热妇无码av在线播放 | 少妇性l交大片欧洲热妇乱xxx | 无遮挡啪啪摇乳动态图 | 人人爽人人爽人人片av亚洲 | 国产精品高潮呻吟av久久4虎 | 国产精品美女久久久网av | 无码精品人妻一区二区三区av | 99久久精品无码一区二区毛片 | 蜜臀aⅴ国产精品久久久国产老师 | 欧美黑人乱大交 | 国产激情综合五月久久 | 国模大胆一区二区三区 | 中文字幕 人妻熟女 | 强奷人妻日本中文字幕 | 无码中文字幕色专区 | 日韩人妻无码中文字幕视频 | 少妇的肉体aa片免费 | 无码国产乱人伦偷精品视频 | 国产精品久久国产精品99 | 天天拍夜夜添久久精品 | 东京一本一道一二三区 | aa片在线观看视频在线播放 | 久久zyz资源站无码中文动漫 | 一本色道久久综合狠狠躁 | 国产成人综合在线女婷五月99播放 | 在线 国产 欧美 亚洲 天堂 | 青青青爽视频在线观看 | 成人av无码一区二区三区 | 强奷人妻日本中文字幕 | 国产无套粉嫩白浆在线 | 国产亚洲精品久久久久久国模美 | 欧美怡红院免费全部视频 | 免费无码av一区二区 | 免费人成在线观看网站 | 久久久久亚洲精品男人的天堂 | 亚洲成av人片在线观看无码不卡 | 99久久精品日本一区二区免费 | 我要看www免费看插插视频 | 中文字幕无码免费久久9一区9 | 麻花豆传媒剧国产免费mv在线 | 国产 精品 自在自线 | 亚洲精品综合一区二区三区在线 | 日本一卡2卡3卡四卡精品网站 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 老太婆性杂交欧美肥老太 | 久久国产36精品色熟妇 | 黄网在线观看免费网站 | 欧美日本精品一区二区三区 | 国产av一区二区精品久久凹凸 | 色综合久久网 | 亚洲色欲久久久综合网东京热 | 国产精品沙发午睡系列 | 亚洲熟悉妇女xxx妇女av | 中文字幕av日韩精品一区二区 | 少妇无码av无码专区在线观看 | 99精品视频在线观看免费 | 日本精品人妻无码免费大全 | 欧美日韩色另类综合 | 国内精品人妻无码久久久影院 | 动漫av网站免费观看 | 精品无码国产自产拍在线观看蜜 | 99久久人妻精品免费一区 | 牲欲强的熟妇农村老妇女 | 久久人人爽人人爽人人片ⅴ | 色 综合 欧美 亚洲 国产 | 伦伦影院午夜理论片 | 丁香啪啪综合成人亚洲 | 午夜精品久久久久久久久 | 伦伦影院午夜理论片 | 夜夜高潮次次欢爽av女 | 狠狠色欧美亚洲狠狠色www | 国产在线一区二区三区四区五区 | 2020久久香蕉国产线看观看 | 亚洲精品午夜国产va久久成人 | 日本饥渴人妻欲求不满 | 久久99精品国产.久久久久 | 亚洲日本va午夜在线电影 | 特级做a爰片毛片免费69 | 熟妇女人妻丰满少妇中文字幕 | 熟妇人妻激情偷爽文 | 日本乱偷人妻中文字幕 | 成人精品视频一区二区三区尤物 | 高清不卡一区二区三区 | 欧美精品一区二区精品久久 | 欧美激情一区二区三区成人 | 中文字幕av无码一区二区三区电影 | 亚洲精品久久久久中文第一幕 | 人妻天天爽夜夜爽一区二区 | 国产成人午夜福利在线播放 |