久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

接口和類(lèi)到底怎么選?從語(yǔ)法差異到項(xiàng)目實(shí)戰(zhàn)一次講透

接口和類(lèi)到底怎么選?從語(yǔ)法差異到項(xiàng)目實(shí)戰(zhàn)一次講透 接口和類(lèi)的區(qū)別這話題我在各種技術(shù)群里看人吵了無(wú)數(shù)次了。每次一聊到“什么時(shí)候用接口什么時(shí)候用抽象類(lèi)什么時(shí)候我就直接寫(xiě)個(gè)普通類(lèi)拉倒”總有老哥能從古早的Java教材一路談到項(xiàng)目里那坨只可意會(huì)不可言傳的祖?zhèn)鞔a。我自己帶過(guò)幾個(gè)項(xiàng)目見(jiàn)過(guò)把接口用成擺設(shè)的也見(jiàn)過(guò)把接口拆得比樂(lè)高還碎、一個(gè)功能恨不得定義五個(gè)接口的設(shè)計(jì)潔癖說(shuō)實(shí)話這兩個(gè)概念沒(méi)在真實(shí)項(xiàng)目里頓悟過(guò)一兩回靠背面試題是真的很難吃透。今天不聊教科書(shū)就著這些年踩過(guò)的坑和對(duì)源碼的一些理解把“接口”和“類(lèi)”這件事一次性捋清楚。這篇內(nèi)容不挑語(yǔ)言基礎(chǔ)只要你在寫(xiě)Java、C、PHP、Python或者其他什么面向?qū)ο蟮恼Z(yǔ)言都應(yīng)該能從中撈到點(diǎn)有用的東西。我會(huì)從底層邏輯、語(yǔ)法差異、設(shè)計(jì)思路一直到項(xiàng)目落地時(shí)的選型判斷逐層拆開(kāi)來(lái)說(shuō)。哪怕是剛學(xué)會(huì)寫(xiě)類(lèi)的小白看完也應(yīng)該能建立起一套自己的判斷標(biāo)準(zhǔn)而不是死記硬背“接口不能實(shí)例化、類(lèi)可以實(shí)例化”這種口訣。1. 先建立認(rèn)知接口和類(lèi)的本質(zhì)分工要理解它們的區(qū)別不能先背語(yǔ)法表。先想清楚一個(gè)問(wèn)題類(lèi)到底是什么接口又到底是什么類(lèi)本質(zhì)上是一個(gè)“具體的東西”。它把狀態(tài)和行為打包在一起。狀態(tài)是字段、屬性行為是方法。你new一個(gè)類(lèi)出來(lái)它就是一塊真實(shí)的、有內(nèi)存形態(tài)的對(duì)象。比如“寶馬汽車(chē)”這個(gè)類(lèi)它有顏色、有排量、有方向盤(pán)能啟動(dòng)能剎車(chē)。你說(shuō)“給我造一輛寶馬”它得真能造出來(lái)。接口本質(zhì)上是一份“契約”。它不負(fù)責(zé)任何具體實(shí)現(xiàn)只負(fù)責(zé)規(guī)定“你必須能做什么”。比如“可駕駛”這個(gè)接口規(guī)定你必須有“啟動(dòng)”和“剎車(chē)”這兩個(gè)能力但至于你是用內(nèi)燃機(jī)啟動(dòng)還是用電動(dòng)機(jī)啟動(dòng)接口不管。你說(shuō)“我要一個(gè)可駕駛的東西”可能來(lái)的是寶馬也可能來(lái)的是拖拉機(jī)。這樣一說(shuō)區(qū)別就很顯然了類(lèi)解決的是“怎么做”的問(wèn)題接口解決的是“能做什么”的問(wèn)題。我在項(xiàng)目里見(jiàn)過(guò)很多人犯一個(gè)認(rèn)知錯(cuò)誤一上來(lái)定義了個(gè)接口接口里寫(xiě)了十來(lái)個(gè)方法然后找了一個(gè)實(shí)現(xiàn)類(lèi)把所有方法都實(shí)現(xiàn)了一遍從此這個(gè)接口就再也沒(méi)被第二個(gè)類(lèi)用過(guò)。這種接口的意義幾乎為零。接口的價(jià)值不在于“我定義了個(gè)類(lèi)型”而在于“多個(gè)完全不相關(guān)的類(lèi)因?yàn)楣蚕硗环萜跫s從而可以被統(tǒng)一調(diào)度”。再往深一點(diǎn)說(shuō)類(lèi)和接口的分工也決定了它們?cè)谙到y(tǒng)中扮演的角色不同。類(lèi)是你系統(tǒng)的“血肉”負(fù)責(zé)承載業(yè)務(wù)復(fù)雜度、處理數(shù)據(jù)、組織邏輯。接口是你系統(tǒng)的“骨架”負(fù)責(zé)定義邊界、穩(wěn)定協(xié)作關(guān)系。架構(gòu)設(shè)計(jì)的時(shí)候你要先搭骨架再填血肉而不是先把血肉堆成一團(tuán)再試圖反推骨架。這就是為什么大廠里常見(jiàn)的設(shè)計(jì)是先定義接口再討論實(shí)現(xiàn)類(lèi)。我從實(shí)際項(xiàng)目里的感受是當(dāng)你發(fā)現(xiàn)自己開(kāi)始糾結(jié)“這個(gè)接口到底該怎么命名才能涵蓋未來(lái)所有可能”的時(shí)候你大概率是被設(shè)計(jì)潔癖綁架了。接口是簡(jiǎn)潔的承諾不是無(wú)所不包的預(yù)言。承諾得越少系統(tǒng)越容易演化。2. 語(yǔ)法層面的硬核區(qū)別聊完認(rèn)知來(lái)硬的。語(yǔ)法層面接口和類(lèi)的差異在各個(gè)語(yǔ)言里大同小異但以Java最為典型。我直接用表格把關(guān)鍵差異列出來(lái)再逐個(gè)展開(kāi)講。對(duì)比項(xiàng)類(lèi)Class接口Interface實(shí)例化可以new不能new方法實(shí)現(xiàn)方法可以有實(shí)現(xiàn)Java 8前不能有實(shí)現(xiàn)Java 8后可有default/static方法字段可有任意狀態(tài)字段只能有public static final常量構(gòu)造方法有沒(méi)有繼承/實(shí)現(xiàn)類(lèi)單繼承類(lèi)接口多繼承接口類(lèi)可多實(shí)現(xiàn)接口訪問(wèn)修飾符可自由指定方法默認(rèn)public抽象程度具體類(lèi)實(shí)現(xiàn)完整邏輯抽象類(lèi)可留抽象方法全是約定沒(méi)有具體狀態(tài)先來(lái)說(shuō)最關(guān)鍵的多重繼承問(wèn)題。Java的類(lèi)只能單繼承這是為了防止菱形繼承搗亂。但接口可以多實(shí)現(xiàn)一個(gè)類(lèi)可以implements好幾個(gè)接口就像“一個(gè)人可以既是司機(jī)又當(dāng)廚師還兼職攝影師”一樣幾個(gè)契約之間互不打架。C里類(lèi)的多繼承則是直接把菱形繼承問(wèn)題交給了程序員用虛繼承才能避免二義性很多C老手都栽過(guò)這個(gè)坑。然后是抽象類(lèi)。這個(gè)經(jīng)常和接口混淆。抽象類(lèi)是“不完整的類(lèi)”它已經(jīng)是類(lèi)了有構(gòu)造方法、有字段、有部分實(shí)現(xiàn)只是其中有些方法沒(méi)有實(shí)現(xiàn)留到子類(lèi)去填。它和接口的區(qū)別本質(zhì)上是抽象類(lèi)關(guān)心的是“你是誰(shuí)”接口關(guān)心的是“你能干嘛”。舉個(gè)例子“動(dòng)物”是抽象類(lèi)因?yàn)樗形锓N屬性、身高體重這些狀態(tài)也有叫喚這個(gè)抽象方法而“會(huì)飛”是接口蝙蝠和蝴蝶都能實(shí)現(xiàn)它但相處沒(méi)有任何血緣關(guān)系。如果你心里裝著“is-a”關(guān)系用抽象類(lèi)如果你是“has-a能力”、“can-do行為”用接口。字段這塊也很多人記錯(cuò)。接口里的字段不管你寫(xiě)不寫(xiě)修飾符它最終都是public static final。這意味著接口不能有狀態(tài)它的“常量”其實(shí)是為了協(xié)議定義服務(wù)的比如定義版本號(hào)、默認(rèn)配置、狀態(tài)碼。而類(lèi)的字段就是真正參與對(duì)象的生命周期和業(yè)務(wù)邏輯的。所以你要把可變狀態(tài)塞進(jìn)接口里語(yǔ)法層面直接就不允許。這也從另一個(gè)角度說(shuō)明接口是穩(wěn)定的契約不允許被狀態(tài)污染。還有一點(diǎn)容易被忽略構(gòu)造方法。類(lèi)必須有構(gòu)造方法哪怕默認(rèn)的無(wú)參構(gòu)造它也存在因?yàn)橐獙?shí)例化就要走構(gòu)造流程。接口壓根沒(méi)有構(gòu)造方法因?yàn)樗烊痪筒皇怯脕?lái)“生成對(duì)象”的。有些人會(huì)問(wèn)匿名內(nèi)部類(lèi)實(shí)現(xiàn)接口的時(shí)候好像寫(xiě)了構(gòu)造邏輯那是類(lèi)在構(gòu)造不是接口在構(gòu)造。你new的對(duì)象其實(shí)是編譯器幫你生成的匿名類(lèi)不是接口本身。再說(shuō)說(shuō)抽象類(lèi)的“類(lèi)屬性”帶來(lái)的一些后果。因?yàn)榻涌诓荒苡袑?shí)例字段所以在需要“攜帶狀態(tài)”的抽象設(shè)計(jì)上接口就很別扭。比如你要抽象一個(gè)連接池池里有大小、繁忙計(jì)數(shù)這些狀態(tài)這用接口定義起來(lái)就很不舒服。這時(shí)候抽象類(lèi)甚至普通基類(lèi)就更合適。這是我這兩年做中間件封裝時(shí)最深刻的體會(huì)接口適合定義“通道”抽象類(lèi)適合定義“底座”。3. 語(yǔ)法之外設(shè)計(jì)層面的差異才是靈魂語(yǔ)法區(qū)別背得再熟寫(xiě)不出好代碼也白搭。接口和類(lèi)真正的區(qū)別在設(shè)計(jì)中體現(xiàn)得更兇。在項(xiàng)目里我見(jiàn)過(guò)一個(gè)最常見(jiàn)的反派面向?qū)崿F(xiàn)編程。調(diào)用方直接依賴某個(gè)具體的類(lèi)比如HashMap用得爽就直接把HashMap當(dāng)參數(shù)類(lèi)型傳遍天涯海角。結(jié)果下一次需求要換并發(fā)安全的Map所有方法簽名都得跟著改光改類(lèi)型就能改一天。這就是典型的“類(lèi)依賴”帶來(lái)的耦合。而面向接口編程核心是依賴倒置高層模塊不依賴低層模塊兩者都依賴抽象。你把Map接口當(dāng)成方法參數(shù)類(lèi)型傳HashMap也好ConcurrentHashMap也罷調(diào)用方一概不感知。這時(shí)候接口就是你給代碼之間加的“緩沖墊”讓兩邊可以各自演化?;卣{(diào)機(jī)制是接口在實(shí)際業(yè)務(wù)中最典型的應(yīng)用?;卣{(diào)的本質(zhì)是某個(gè)模塊在事件發(fā)生的時(shí)候調(diào)用你注冊(cè)進(jìn)來(lái)的代碼。Java里最古典的回調(diào)方式就是定義一個(gè)接口把方法實(shí)現(xiàn)傳出去。比如你給按鈕注冊(cè)點(diǎn)擊事件public interface OnClickListener { void onClick(View v); } button.setOnClickListener(new OnClickListener() { Override public void onClick(View v) { // 點(diǎn)按之后具體干什么 } });看到?jīng)]OnClickListener是個(gè)接口它做的事情就是定義“點(diǎn)擊事件到了之后你要干什么”的契約。按鈕這個(gè)類(lèi)自己不關(guān)心你干了什么它只負(fù)責(zé)在點(diǎn)擊的時(shí)候喊一嗓子“onClick”然后具體執(zhí)行什么邏輯全由調(diào)用方實(shí)現(xiàn)。到了JDK 8之后Java引入了lambda和函數(shù)式接口這種“只定義契約不實(shí)現(xiàn)邏輯”的模式被發(fā)揮到了極致。函數(shù)式接口就是只有一個(gè)抽象方法的接口lambda表達(dá)式本質(zhì)上就是這種接口的匿名實(shí)現(xiàn)。比如list.stream().filter(x - x 5).forEach(System.out::println);這里filter接收的是PredicateIntegerforEach接收的是ConsumerInteger這對(duì)只關(guān)注語(yǔ)法的人來(lái)說(shuō)可能沒(méi)什么感覺(jué)但對(duì)理解接口的人來(lái)說(shuō)這就是接口的現(xiàn)代形態(tài)一個(gè)接口不再非要聲明成“某某Service”它完全可以是一個(gè)語(yǔ)義單一的普通接口用來(lái)承載一個(gè)函數(shù)級(jí)別的契約。也是因?yàn)檫@種設(shè)計(jì)Kotlin里干脆把lambda和接口玩成了一個(gè)東西你甚至可以拿lambda去替代大部分單方法接口。再比如Android開(kāi)發(fā)里常見(jiàn)的“回調(diào)轉(zhuǎn)掛起工具類(lèi)”。協(xié)程的suspendCancellableCoroutine本質(zhì)上就是把你那個(gè)回調(diào)式的接口轉(zhuǎn)換成一種掛起函數(shù)。背后的邏輯就是接口在這兒是一種“通道”它接收外部產(chǎn)生的事件你的工具類(lèi)負(fù)責(zé)把這個(gè)通道轉(zhuǎn)成協(xié)程能響應(yīng)的東西。如果離開(kāi)了接口這個(gè)抽象壓根不可能完成這種跨范式的轉(zhuǎn)換。接口的威力就在這里它在各種編程范式之間當(dāng)翻譯官。那類(lèi)在設(shè)計(jì)層面的定位是什么呢類(lèi)適合承擔(dān)“實(shí)體建?!焙汀熬唧w策略”的角色。在策略模式里接口定義“策略”的骨架不同的類(lèi)填充不同的算法細(xì)節(jié)。比如支付方式PaymentStrategy是接口微信支付、支付寶支付、銀行卡支付是不同類(lèi)。調(diào)用方拿著接口類(lèi)型運(yùn)行時(shí)塞進(jìn)哪個(gè)實(shí)現(xiàn)執(zhí)行的就是哪種支付策略。這里類(lèi)的職責(zé)是提供差異化的實(shí)現(xiàn)方案接口的職責(zé)是統(tǒng)一它們的對(duì)外形態(tài)。再說(shuō)一個(gè)很多人容易產(chǎn)生誤會(huì)的點(diǎn)接口和類(lèi)的設(shè)計(jì)視角。類(lèi)是自下而上的你看到業(yè)務(wù)里有一個(gè)具體的東西你把它的屬性和行為歸納出來(lái)形成一個(gè)類(lèi)。接口是自上而下的你先定義好系統(tǒng)內(nèi)角色之間的協(xié)作關(guān)系再把“誰(shuí)能承擔(dān)這個(gè)角色”的設(shè)計(jì)要求投射給實(shí)現(xiàn)方。所以我們做架構(gòu)的時(shí)候順序往往是先寫(xiě)接口再寫(xiě)實(shí)現(xiàn)類(lèi)。順序反了你就是在給代碼寫(xiě)事后說(shuō)明而不是在做設(shè)計(jì)。4. 不同語(yǔ)言生態(tài)下接口與類(lèi)的變體對(duì)比接口和類(lèi)的區(qū)別不是Java的專(zhuān)享話題。在每個(gè)語(yǔ)言里這兩者都有自己變了個(gè)樣子的表達(dá)方式搞懂它們有個(gè)共同內(nèi)核對(duì)你切換到其他語(yǔ)言會(huì)非常有幫助。Java接口語(yǔ)法演進(jìn)最典型。JDK 7時(shí)代接口只能有抽象方法一個(gè)方法都不能實(shí)現(xiàn)。JDK 8引入了default方法和static方法這時(shí)候接口開(kāi)始具備了一定“實(shí)現(xiàn)能力”。JDK 9之后又允許接口寫(xiě)私有方法專(zhuān)門(mén)給default方法當(dāng)內(nèi)部工具方法用。但無(wú)論怎么演進(jìn)接口始終沒(méi)有字段、沒(méi)有狀態(tài)這條紅線從沒(méi)破過(guò)。C沒(méi)有interface這個(gè)關(guān)鍵字。C里可以用純虛類(lèi)也叫抽象基類(lèi)模擬接口一個(gè)類(lèi)全是純虛函數(shù)沒(méi)有數(shù)據(jù)成員沒(méi)有構(gòu)造函數(shù)實(shí)現(xiàn)它就是接口。C的純虛類(lèi)比Java接口更野一點(diǎn)因?yàn)樗梢杂谐蓡T函數(shù)聲明、析構(gòu)函數(shù)甚至可以在虛析構(gòu)里有默認(rèn)實(shí)現(xiàn)。還有一個(gè)區(qū)別C沒(méi)有內(nèi)置的interface和implement的區(qū)分所以它就是靠類(lèi)的語(yǔ)法特性硬拗出了“接口”這個(gè)形態(tài)。Python走的是鴨子類(lèi)型理論上不需要接口。Python講究“看到了就是”你要的是能叫的那它只要會(huì)quack()就夠了根本不關(guān)心它是鴨子還是人。這種靈活性很爽但大型項(xiàng)目里沒(méi)約束就是災(zāi)難的溫床。所以Python的標(biāo)準(zhǔn)庫(kù)提供了abcAbstract Base Classes模塊用抽象基類(lèi)來(lái)疊加約束。再有就是typing.Protocol這個(gè)更神奇它是結(jié)構(gòu)性子類(lèi)型不需要類(lèi)顯式繼承它只要類(lèi)的結(jié)構(gòu)上有對(duì)應(yīng)方法類(lèi)型檢查器就認(rèn)可它符合這個(gè)協(xié)議。Python在接口這件事上更像是做“道德約束”而不是“法律約束”。PHPclass 和 interface 分得清清楚楚interface 里可以定義常量和方法簽名實(shí)現(xiàn)類(lèi)用implements關(guān)鍵字。PHP有個(gè)比Java現(xiàn)代的地方接口支持常量但子類(lèi)不能被 override——這在Java里其實(shí)也能做但語(yǔ)義上不太順。PHP里還能同時(shí)繼承類(lèi)和實(shí)現(xiàn)接口誰(shuí)是對(duì)誰(shuí)是什么一望即知。Go嚴(yán)格來(lái)說(shuō)Go不是傳統(tǒng)OOP語(yǔ)言但它的接口設(shè)計(jì)是我認(rèn)為最有啟發(fā)性的。Go的接口是隱式實(shí)現(xiàn)不需要你用implements聲明只要一個(gè)類(lèi)的方法集合包含了接口的全部方法它就自動(dòng)實(shí)現(xiàn)了這個(gè)接口。這種“鴨子類(lèi)型編譯期檢查”的組合讓接口在Go里用起來(lái)十分輕量接口成了組合的利器。我最早對(duì)接口的理解是純Java視角的后來(lái)接觸了Python和Go才意識(shí)到接口的本質(zhì)其實(shí)是“對(duì)能力的最小承諾”。不同語(yǔ)言只是把這同一個(gè)承諾包裝成不同的語(yǔ)法外衣罷了。所以面試問(wèn)你“接口和類(lèi)的區(qū)別”你別只背Java語(yǔ)法你要能把這種“契約vs實(shí)現(xiàn)”的底層認(rèn)知講出來(lái)那才是真正理解了。下面給一個(gè)多語(yǔ)言快速對(duì)照表語(yǔ)言接口實(shí)現(xiàn)方式類(lèi)的繼承接口是否可含實(shí)現(xiàn)特點(diǎn)備注Javaimplements interface單繼承JDK8可含default/static嚴(yán)謹(jǐn)類(lèi)型體系清晰C純虛類(lèi)多繼承純虛類(lèi)無(wú)實(shí)現(xiàn)但可有虛析構(gòu)強(qiáng)大但容易踩菱形繼承Python鴨子類(lèi)型 ABC/Protocol多繼承抽象基類(lèi)可含實(shí)現(xiàn)靈活靠自覺(jué)類(lèi)型檢查PHPimplements interface單繼承可定義方法簽名與常量與Java高度類(lèi)似Go隱式實(shí)現(xiàn)組合替代繼承接口通常只放方法簽名組合優(yōu)于繼承隱式自適應(yīng)5. 項(xiàng)目實(shí)戰(zhàn)怎樣的代碼才算用對(duì)了接口和類(lèi)原理講再多不如看兩段真實(shí)的代碼來(lái)得直觀。我拿一個(gè)業(yè)務(wù)系統(tǒng)里特別經(jīng)典的需求來(lái)說(shuō)事大家看明白之后馬上就能在自己的項(xiàng)目里用起來(lái)。假設(shè)要做多平臺(tái)的登錄對(duì)接平臺(tái)有微信、抖音、淘寶。很多人拿到需求就開(kāi)始寫(xiě)類(lèi)新建一個(gè)WechatLoginService里面一個(gè)login()方法寫(xiě)它微信授權(quán)的邏輯新建一個(gè)TiktokLoginService里面也是login()但代碼是抖音授權(quán)的邏輯。到后端的時(shí)候看起來(lái)也沒(méi)毛病就是三個(gè)類(lèi)干三套活兒。但是接下來(lái)問(wèn)題就來(lái)了。你的業(yè)務(wù)主流程要用統(tǒng)一的“登錄”入口你寫(xiě)代碼的時(shí)候就得這樣if (platform.equals(wechat)) { wechatLoginService.login(); } else if (platform.equals(tiktok)) { tiktokLoginService.login(); }這種就是典型的面向類(lèi)編程。每加一個(gè)新平臺(tái)你就要在主流程里加一分支。平臺(tái)多了之后這主流程代碼寫(xiě)著寫(xiě)著就成了一盤(pán)大雜燴每個(gè)分支里還可能混著各自平臺(tái)返回的用戶信息轉(zhuǎn)本系統(tǒng)的邏輯到最后沒(méi)人敢動(dòng)這塊代碼因?yàn)橐徊涣羯窬蛣?dòng)了誰(shuí)的奶酪。正確的做法是用接口定義登錄的契約讓每個(gè)平臺(tái)按契約各自實(shí)現(xiàn)public interface PlatformLoginService { // 每個(gè)平臺(tái)統(tǒng)一的登錄入口 LoginResult login(LoginRequest request); // 每個(gè)平臺(tái)回調(diào)校驗(yàn)的統(tǒng)一入口 UserProfile verifyCallback(String code, MapString, String params); // 給業(yè)務(wù)方用的平臺(tái)識(shí)別 PlatformEnum platform(); }然后讓微信、抖音、淘寶各自的類(lèi)去implements這個(gè)接口。主流程里只需要這樣public LoginResult login(String platform, LoginRequest request) { PlatformLoginService service serviceRegistry.get(platform); return service.login(request); }新平臺(tái)接入的時(shí)候只需要新寫(xiě)一個(gè)實(shí)現(xiàn)類(lèi)并且注冊(cè)到serviceRegistry里主流程一行代碼都不用改。這就是“開(kāi)閉原則”對(duì)擴(kuò)展開(kāi)放對(duì)修改關(guān)閉。而能把擴(kuò)展打開(kāi)的那把鑰匙就是接口。我再補(bǔ)充一個(gè)我在真實(shí)項(xiàng)目里踩過(guò)的坑。很多人確實(shí)會(huì)模仿這個(gè)寫(xiě)法創(chuàng)建接口但實(shí)現(xiàn)類(lèi)里干的一件事是把接口里定義的方法參數(shù)、返回值類(lèi)型直接用自己家的自定義類(lèi)比如LoginResult這個(gè)類(lèi)型是微信平臺(tái)定制的里面有微信特有的字段。結(jié)果其他平臺(tái)想實(shí)現(xiàn)的時(shí)候發(fā)現(xiàn)返回值根本沒(méi)法用只能往這個(gè)類(lèi)里硬塞一堆null字段。接口一旦被具體實(shí)現(xiàn)“劫持”了類(lèi)型定義它就不再是契約了而是一張某實(shí)現(xiàn)類(lèi)的皮。這里特別考驗(yàn)設(shè)計(jì)者的火候接口里的類(lèi)型必須是通用抽象層的東西不能是某個(gè)實(shí)現(xiàn)專(zhuān)屬的東西。再說(shuō)一個(gè)很多人的疑問(wèn)接口和類(lèi)在實(shí)際底層源碼里編譯器是怎么處理它們的關(guān)系的Java里interface編譯之后也會(huì)生成一個(gè).class文件和普通類(lèi)的字節(jié)碼格式基本一致。關(guān)鍵在于JVM的invokeinterface指令和invokevirtual指令兩者方法分派的邏輯不同。接口方法是JVM運(yùn)行時(shí)動(dòng)態(tài)找具體實(shí)現(xiàn)類(lèi)的走的是“它得先確認(rèn)你能調(diào)這個(gè)接口方法”的路徑所以直接用接口引用調(diào)用方法會(huì)走invokeinterface性能上會(huì)比invokevirtual稍微差一丁點(diǎn)?,F(xiàn)代JVM會(huì)做各種優(yōu)化比如內(nèi)聯(lián)緩存這點(diǎn)差異在絕大多數(shù)業(yè)務(wù)場(chǎng)景里幾乎可以忽略不計(jì)。但面試官如果問(wèn)到“接口方法和類(lèi)方法的JVM調(diào)用區(qū)別”能答到這個(gè)層次絕對(duì)是個(gè)加分項(xiàng)。6. 避坑指南實(shí)踐中常見(jiàn)的選型問(wèn)題與排查思路聊到具體項(xiàng)目里的經(jīng)驗(yàn)必須得把那些年寫(xiě)代碼時(shí)流過(guò)的血淚一并說(shuō)出來(lái)。這里我整理幾個(gè)高頻踩坑場(chǎng)景方便各位直接對(duì)照。第一個(gè)問(wèn)題接口越抽象越好嗎不是。接口定義的粒度應(yīng)該和業(yè)務(wù)協(xié)作的真實(shí)需求匹配。我見(jiàn)過(guò)有人為了“可擴(kuò)展性”把接口方法拆到極細(xì)一個(gè)doStep1()、一個(gè)doStep2()、一個(gè)doStep3()。結(jié)果實(shí)現(xiàn)類(lèi)根本沒(méi)幾個(gè)反倒是調(diào)用方要組合調(diào)用一堆接口方法才能完成一個(gè)完整業(yè)務(wù)動(dòng)作。好的接口應(yīng)該是“一次調(diào)用完成一個(gè)完整業(yè)務(wù)動(dòng)作”而不是把動(dòng)作的每一個(gè)細(xì)節(jié)都暴露出去。接口是給外部看的門(mén)面不是給內(nèi)部看的結(jié)構(gòu)。第二個(gè)問(wèn)題如何判斷該用接口還是抽象類(lèi)看兩個(gè)東西一看是否有狀態(tài)要共享二看子類(lèi)之間是否天然互相替換。如果這些類(lèi)有一個(gè)共同的“身份”比如都是數(shù)據(jù)庫(kù)驅(qū)動(dòng)、都是消息中間件客戶端而且它們需要共享連接池、配置加載這類(lèi)基礎(chǔ)設(shè)施字段那就用抽象類(lèi)作為基類(lèi)。如果這些類(lèi)的能力是一致的但實(shí)現(xiàn)完全八竿子打不著比如日志記錄器、序列化器、緩存都是“插拔式能力”那就是接口的菜。有一個(gè)很土的判斷口訣我一直拿它救命抽象類(lèi)適合“都是XX”接口適合“都能XX”。都是動(dòng)物都能飛前者用抽象類(lèi)后者用接口。都能序列化、都能緩存、都能登錄找接口都是一個(gè)體系的通信協(xié)議、都有公共的連接管理字段找抽象類(lèi)。第三個(gè)問(wèn)題接口方法參數(shù)的校驗(yàn)要放在哪一層這是特別容易被忽視的點(diǎn)。很多初學(xué)者把實(shí)現(xiàn)類(lèi)內(nèi)部做了一堆if (request null) throw new IllegalArgumentException()這種防御性代碼。老實(shí)說(shuō)不是不行但更好的做法是接口方法的javadoc里明確說(shuō)明參數(shù)約束實(shí)現(xiàn)類(lèi)再各自校驗(yàn)。但如果你把校驗(yàn)放在接口層上比如default方法里做通用校驗(yàn)?zāi)悄憔涂梢詫?shí)現(xiàn)全局統(tǒng)一約束不會(huì)出現(xiàn)微信實(shí)現(xiàn)校驗(yàn)了、抖音實(shí)現(xiàn)忘了校驗(yàn)這種“同一接口實(shí)現(xiàn)之間約束不一致”的鬧劇。Java 8允許接口寫(xiě)default方法就是干這個(gè)用的。第四個(gè)問(wèn)題接口里突然要加一個(gè)方法怎么辦這是老Java程序員的最痛。假設(shè)你的接口已經(jīng)被幾十個(gè)實(shí)現(xiàn)類(lèi)繼承了現(xiàn)在新需求要求所有實(shí)現(xiàn)類(lèi)必須支持“導(dǎo)出”。你往接口里一加抽象方法所有實(shí)現(xiàn)類(lèi)全部編譯報(bào)錯(cuò)。這里有兩個(gè)方案但都得分清代價(jià)方案一把新方法聲明為default方法并給一個(gè)合理的默認(rèn)實(shí)現(xiàn)比如直接throw new UnsupportedOperationException(當(dāng)前實(shí)現(xiàn)不支持導(dǎo)出)。好處是改動(dòng)極小壞處是有些實(shí)現(xiàn)類(lèi)可能悄悄“不支持”但不報(bào)錯(cuò)屬于靜默失敗。方案二忍受一次全量修改。把方法加進(jìn)去然后跑到每個(gè)實(shí)現(xiàn)類(lèi)里編譯報(bào)錯(cuò)了一個(gè)個(gè)補(bǔ)。適合實(shí)現(xiàn)類(lèi)不太多并且每個(gè)都得真正實(shí)現(xiàn)的情況。我個(gè)人的經(jīng)驗(yàn)是能預(yù)計(jì)到未來(lái)會(huì)有哪些變法的接口定義的時(shí)候盡量窄真到擴(kuò)展的那一天寧可新建一個(gè)子接口不要?jiǎng)永系慕涌?。比如定義UserQueryService放查詢方法再定義UserCommandService extends UserQueryService放寫(xiě)操作方法。這樣老實(shí)現(xiàn)類(lèi)不受影響新實(shí)現(xiàn)類(lèi)按需選擇實(shí)現(xiàn)哪個(gè)接口。接口的演進(jìn)策略本質(zhì)上也是一個(gè)系統(tǒng)的演進(jìn)策略。第五個(gè)問(wèn)題接口和類(lèi)在“類(lèi)加載”這個(gè)環(huán)節(jié)有什么關(guān)系這個(gè)話題挺冷門(mén)但接熱詞聊一下。Java的類(lèi)加載機(jī)制對(duì)類(lèi)和接口都有效但兩者有個(gè)細(xì)微差別類(lèi)的初始化會(huì)觸發(fā)靜態(tài)塊、靜態(tài)字段賦值接口也有初始化機(jī)制但接口的初始化只發(fā)生在使用到接口里的常量/靜態(tài)字段時(shí)且接口沒(méi)有靜態(tài)代碼塊。所以在排查“為什么接口里的常量死活不生效”或“接口的static字段為null”這類(lèi)問(wèn)題時(shí)第一反應(yīng)就是去看看類(lèi)加載順序和初始化時(shí)機(jī)是否因?yàn)橐梅绞讲煌a(chǎn)生了差異。這個(gè)一般出現(xiàn)在搞模塊化、自定義ClassLoader、熱部署的場(chǎng)景。平時(shí)寫(xiě)業(yè)務(wù)估計(jì)感覺(jué)不到但面試和排查疑難雜癥時(shí)這是拉開(kāi)差距的知識(shí)點(diǎn)。第六個(gè)問(wèn)題IDE里怎么快速查一個(gè)import的類(lèi)到底是從哪個(gè)依賴包來(lái)的這個(gè)看似和接口類(lèi)區(qū)別沒(méi)關(guān)系但實(shí)際干活時(shí)天天用到。比如項(xiàng)目里有兩個(gè)jar包都定義了UserService接口你的import com.xxx.UserService到底引的是誰(shuí)在IDEA里直接按CtrlN或輸入類(lèi)名后CtrlAlt組合鍵看彈出框能全局搜類(lèi)但要看類(lèi)的來(lái)源最直接的方法是光標(biāo)點(diǎn)在那個(gè)import上按F4跳到定義處右側(cè)Project面板會(huì)自動(dòng)顯示當(dāng)前類(lèi)所在的jar包位置或者直接看左下角Project標(biāo)簽頁(yè)里的External Libraries。還有一個(gè)快捷鍵是CtrlAltB跳到實(shí)現(xiàn)處用它能確認(rèn)實(shí)現(xiàn)類(lèi)和接口的從屬關(guān)系這在排查“為什么這里注入的實(shí)現(xiàn)不是我以為的那個(gè)”時(shí)特別管用。再補(bǔ)充一個(gè)和“接口冪等性”相關(guān)的點(diǎn)。很多人在設(shè)計(jì)接口這里就指HTTP API了的時(shí)候把冪等性理解成“后端做個(gè)去重表”。其實(shí)接口HTTP冪等性和你代碼里的接口/類(lèi)的設(shè)計(jì)也有呼應(yīng)。HTTP接口本質(zhì)也是“契約”說(shuō)好這個(gè)接口是冪等的那它就是冪等的不管調(diào)用方重試多少次服務(wù)端都應(yīng)該保證業(yè)務(wù)結(jié)果一致。這和Java接口的設(shè)計(jì)理念一樣契約說(shuō)出去的話實(shí)現(xiàn)類(lèi)必須無(wú)條件遵守。所以一個(gè)實(shí)現(xiàn)類(lèi)里如果沒(méi)實(shí)現(xiàn)好冪等那不是HTTP的問(wèn)題是你把“契約”簽壞了。凡是寫(xiě)對(duì)外API必須在接口設(shè)計(jì)文檔里寫(xiě)明冪等語(yǔ)義而不是指望調(diào)用方講武德。7. 現(xiàn)代工具鏈上的工程實(shí)踐聊完語(yǔ)法和設(shè)計(jì)再補(bǔ)一段現(xiàn)代工程里接口和類(lèi)的真實(shí)應(yīng)用場(chǎng)景特別是接口配置、接口文檔、接口測(cè)試這類(lèi)“接口”的另一個(gè)維度。熱詞里有個(gè)“多源倉(cāng)庫(kù)接口配置”很多人可能一臉懵感覺(jué)像是某種神秘功能。其實(shí)它就是很常見(jiàn)的“配置驅(qū)動(dòng)”模式原來(lái)你的代碼里硬編碼了調(diào)用哪個(gè)數(shù)據(jù)源、哪個(gè)倉(cāng)庫(kù)地址現(xiàn)在把這些東西抽出來(lái)通過(guò)外部配置文件動(dòng)態(tài)指定。這個(gè)“接口”不是Java的interface更像是一個(gè)“配置條目”它是系統(tǒng)對(duì)外暴露的接入點(diǎn)。這種模式對(duì)接口和類(lèi)的設(shè)計(jì)啟示在于接口不僅是代碼層面的關(guān)鍵字更是系統(tǒng)層面的“對(duì)外協(xié)議”。比如你做數(shù)據(jù)聚合要對(duì)接多個(gè)外部API源每個(gè)源的數(shù)據(jù)格式、認(rèn)證方式、限流策略都不一樣。你可以為每個(gè)API源寫(xiě)一個(gè)實(shí)現(xiàn)類(lèi)然后通過(guò)配置文件把“哪個(gè)源用哪個(gè)實(shí)現(xiàn)類(lèi)”映射起來(lái)。Java里可以用SPIService Provider Interface機(jī)制或者干脆用Spring的配置文件策略注入讓接口在運(yùn)行時(shí)動(dòng)態(tài)綁定到指定實(shí)現(xiàn)。這樣操作的一個(gè)好處是以后要接入一個(gè)新的數(shù)據(jù)源不用改主流程代碼部署完新實(shí)現(xiàn)的jar包或者僅僅是調(diào)整配置系統(tǒng)就能自動(dòng)感知新源。這就是把“類(lèi)”作為實(shí)現(xiàn)單元把“接口”作為集成單元的理想形態(tài)。我做數(shù)據(jù)中臺(tái)的時(shí)候這套配置驅(qū)動(dòng)方式救了不少急改配置而不重新發(fā)版的能力在線上問(wèn)題處理時(shí)實(shí)在太珍貴了。接口文檔也是一樣。你現(xiàn)在寫(xiě)好接口定義后續(xù)的實(shí)現(xiàn)類(lèi)都是“履約”。所以對(duì)工程團(tuán)隊(duì)來(lái)說(shuō)文檔先行、接口先行遠(yuǎn)比代碼先行靠譜。我用過(guò)的做法是先定義好接口類(lèi)和DTO數(shù)據(jù)傳輸對(duì)象寫(xiě)清楚每個(gè)接口的入?yún)?、出參、異常語(yǔ)義甚至直接用OpenAPI注解把接口描述掛上去然后讓不同人并行去寫(xiě)實(shí)現(xiàn)類(lèi)。這樣團(tuán)隊(duì)協(xié)作時(shí)大家對(duì)“契約”的理解是一致的不會(huì)出現(xiàn)A寫(xiě)的實(shí)現(xiàn)期望傳入的是userIdB寫(xiě)的調(diào)用方傳的是用戶對(duì)象這種雞同鴨講的情況。這也從工程管理的角度印證了接口和類(lèi)的關(guān)系接口在協(xié)作流程里就是大家共同對(duì)齊的“合同”。日志也是一個(gè)被忽略的視角。很多團(tuán)隊(duì)的日志打印得亂七八糟其中一個(gè)原因就是用接口還是用類(lèi)導(dǎo)致了日志歸屬混亂。如果你在接口類(lèi)里通過(guò)LoggerFactory.getLogger(this.getClass())來(lái)取日志那么日志會(huì)正確落到具體實(shí)現(xiàn)類(lèi)的名字上排查問(wèn)題的時(shí)候非常有幫助。反過(guò)來(lái)如果你在某一個(gè)工具類(lèi)里硬編碼了日志名那所有走這個(gè)工具類(lèi)的日志都會(huì)混在一起。所以接口和類(lèi)在工程落地時(shí)連日志這種細(xì)枝末節(jié)都會(huì)影響可維護(hù)性。我自己的習(xí)慣是不要在接口里定義靜態(tài)日志那沒(méi)有意義日志Logger一律放在具體類(lèi)中且用this.getClass()動(dòng)態(tài)獲取保證日志歸屬永遠(yuǎn)清晰。8. 經(jīng)驗(yàn)總結(jié)與小技巧寫(xiě)到這里也差不多了。把最核心的幾件事用最簡(jiǎn)單的話收個(gè)尾。實(shí)際開(kāi)發(fā)中我內(nèi)心始終帶著這樣一條判斷鏈路拿到一個(gè)需求先想“業(yè)務(wù)里有沒(méi)有多個(gè)實(shí)現(xiàn)要隨時(shí)切換、有沒(méi)有跨系統(tǒng)的協(xié)作點(diǎn)”如果有那就先定義接口再想“這幾個(gè)類(lèi)有沒(méi)有公共字段和公共邏輯可以沉淀到基類(lèi)”如果有那就在抽象類(lèi)或普通基類(lèi)里做沉淀最后才輪到普通類(lèi)的具體業(yè)務(wù)邏輯落地。順序反了寫(xiě)著寫(xiě)著就擰巴了。一個(gè)小技巧送給大家寫(xiě)完一個(gè)接口或者類(lèi)之后退一步看一眼它的名字。接口的名字應(yīng)該像形容詞可飛的、可序列化的、可登錄的類(lèi)的名字應(yīng)該像名詞微信登錄服務(wù)、數(shù)據(jù)庫(kù)連接池、訂單實(shí)體。如果你的接口叫LoginServiceImpl那你肯定是在用類(lèi)思維寫(xiě)接口。如果你的類(lèi)叫SomeAbility那你可能是在用接口思維寫(xiě)類(lèi)。這個(gè)判斷方法我從沒(méi)失手過(guò)。還有一個(gè)我經(jīng)常安利給新同事的快速審查法把接口的所有方法都改成“返回void”然后看看調(diào)用方還怎么用。如果調(diào)用方一下子就不知道怎么組織代碼了說(shuō)明接口的方法設(shè)計(jì)得偏底層、偏細(xì)節(jié)顆粒度不對(duì)如果調(diào)用方依然能順暢地編排業(yè)務(wù)流程說(shuō)明接口確實(shí)暴露的都是業(yè)務(wù)動(dòng)作。這個(gè)方法簡(jiǎn)單粗暴但特別見(jiàn)效果適合在做code review的時(shí)候快速捉妖。最后再多提一嘴接口和類(lèi)并不是互相對(duì)立的存在它們是面向?qū)ο笤O(shè)計(jì)的一體兩面。真正的高手不會(huì)為了用接口而用接口也不會(huì)鄙視接口、覺(jué)得都是多余的。他們只是很清楚系統(tǒng)里哪些位置需要穩(wěn)定的契約哪些位置需要靈活的實(shí)體。想清楚了這個(gè)接口和類(lèi)的區(qū)別自然就不需要背了因?yàn)槟阋呀?jīng)知道在代碼里它倆各該站在哪里了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丝袜美腿校园春色| 蜜汁欧美| 2019久久久久久久久福利| 天天综合网亚洲综合网| 日本女厕偷拍| 免费观看的av| 日韩AV无码中文一区二区| 欧美性夜| 伊人久大| 久久精品视频一区三区小泽玛利亚| 欧美日韩99| 国产精品无码久久久久2025| 天天综合-91入口| 国产AV人人 夜夜人人澡| 簧片免费看视频| 日韩免费簧片| 亚洲欧美日韩免费观看| 亚洲综合嫩| 91久久久久久久| 丰满少妇人妻久久久久久| 国产性爱乱伦AV| 婷婷操视频| www.人人摸在线视频| 美美91成人国产精品欧美精品久久久久久久 | 天天干18禁| 人妻内射一区二区在线视频| 伊人网在线视频| 色综合潮| 超碰1997| 玖玖资源视频一区二区三区| 青青草国产一区二区三区| 怡红院视频在线| 91五月天| 免费9 1久久| 熟妇女人妻呻吟久久AV| 99热综合在线| 成人综合视频久久| 91偷拍欧美亚洲| 男人天堂站| 97九色人妻| 欧美色五月| 无套内射性感少妇视频| 婷婷丁香成人| 久操高青| 日日夜夜草草草| 黄网站黄视频网站进入口| 岛国AV一区二区电影| 国产AV天美| 91av天美性媒精品视频| 久久99999| 96免费视频在线| 久热久一区二区三区| 欧美制服网站美腿丝袜| 69综合网| 人妻熟妇久草在线| 高清有码一区二区| 日本欧美韩国国产在线| 在线观看色视频| 秋霞一级视频在线观看免费| 婷婷色色网| 欧美色三级片91| 九九热超碰97亚洲最新香蕉 | 又粗又长又大国产不卡| 人妻一区视频| 日本一二三高清| 欧美少妇高潮久久91| 麻豆天天躁天天揉揉AV| 青娱乐老司机视频| 亚洲日韩成人性爱视频| 久插综合| 视频在线观看青青99国产| 精品人妻一区二区免费看| 午夜国产成人精品视频| 亚洲成熟国产精品美女| 91高跟美女在线播放| 午夜精品人妻二区三区| av影片在线观看不卡| ji熟女.com| 十八禁视频网站| 爱欲AV| 久久宗合亚洲| 欧美在线天堂| 久操不卡视频| 神马午夜久久久| 久久久久96| 我要色综合网| 国产激情片在线观看| 日本免费一区二| 91九色丰满高潮| 国产精品一区二区校花| 天天看综合网| 日本道不卡| 人妻乱仑一区二区三区| 欧美亚洲美少妇一区二区| 九九九九热只有精品| 国模无码人体一区二区三| 男女真人网18| 一区二区视频你懂的| 日本一区二区不卡| 欧美精品另类人妖xxxx| 国产熟女一区二区| 深夜激情无码| 丰满熟妇大乳做爰| 亚洲操人| 四虎免费在线播放| 国产精品三级视频网站| 五十路人妻在线| 成人av福利在线观看| 色爱综合网| 亚洲综合 欧美| 国产黄色在线播放观看| 激情欧美日韩女同久久| 不卡中文字幕aⅴ在线| 久久乐| 日韩成人小视频| 亚洲黄色网址视频| 国产性爱欧美性爱在线| 黄色片,com| 亚洲天堂人人妻| 人人干黄色| www老逼91| 97香蕉网| 330Dv国产女人终合视频极品人与兽| 97天堂| 欧美亚洲玖玖玖| 日本大香蕉综合网| 伊人天堂在线| 国产精品永久免费10000| 九九九综合精品| 日韩性爱一级片| 97中文天堂| 一二三区操逼国产91| 男人的天堂成人的社区| 9国产超碰| 亚洲日产专区婷婷| 日本亚洲熟女视频| 亚洲欧洲日韩中文字幕一区| 麻豆天美国美国产AV| 97久久网| 嗯嗯啊啊好大好爽| 日韩性爱网址| 色色毛片| 夜夜 中文视频rt| 亚洲av影院在线观看| 超碰9 7女人| 五月丁香久久| 综合国产影视三级| 国产成人五月天丁香花| 少妇500双飞99| 人妻系列无码专区中文有码| 色妇综合网| 熟妇人妻一区二区| 人人扣人人操| 无码人妻一区二区三区色欲aⅴ | 日韩欧美国产高清视频| 99久在线精品99re8蜜桃| 男人的天堂不卡一区二区| 亚州综合在线| 亚州五月| 蜜臀久久久国产| 99视频自拍| 国产在线视频午夜精华在| 男人的天堂在线| 超碰在线99| 亚洲日韩在线a不卡99精品| 国产十八禁视频| 欧美v亚洲v日韩v最新在线二区| 中文字幕国产| 亚洲综合性网址| 亚洲天堂电影精品一区| 久久久久成人亚洲国产| 超碰在线香蕉| 一级岛国大片| 色综合一区二区三区| 中文一区在线日| 久久男人的天堂国产| 老司机深夜影院18未满| 日韩性爱毛片操骚逼| 9118禁| 亚洲熟女一区二区| 中文一区二区| 欧美激情色婷婷花野真衣一区二区| 丁香五月婷婷色| av无码av无码专区| 亚瑟国产精品久久无码| 久久老女人| 怡春院久久| 玖玖资源视频一区二区三区| a片亚洲一本通视频| 77777亚洲蜜臀精品久久综合蜜臀| 新婚人妻扶着粗大强行坐下| 日韩图区 偷拍| 精品国产乱码久久| 国产97视频| 日韩专区久久久| 激情四射五月天| 99re69| 亚洲不卡av在线| 国产视频一区二区在线观看| WWW4虎| 成年女人一区| 夜夜嗷嗷一区二区| 欧美另类自拍 | 一区二区三区色综合| 欧美日韩人人精品| 好淫网一二三视区| 九九热九九热| 男人的天堂色偷偷青青草视频婷婷网| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 久久久人体| 日韩久久三区| 精品久久久久,69国产成人精| 偷拍 精品另类 凸凹了四区| 久久精品72| 欧美国产有色电影| 黄色一区三区| 麻豆熟妇乱妇熟色A片在线看| 天堂av最新电影网| 午夜噜噜噜| 揉揉日日日日| 日本阿v天堂在线观看| 亚洲黑人在线| 91av一区二区在线观看| 久久东京伊人一本到鬼色| 伦伦成年午夜免费视频| 国模精品一区二区三区苹果色戒 | 久久啊啊啊视频| 久久精品电影| 呦呦一区| 最新国产亚洲精品精品国产亚洲综合 | 青青青国产| 白丝AV网站| 亚洲色情在线影视| 亚洲Av诱惑| 天天射天天操天天干天天吃2018| 黄片com.| 色哟哟-国产专区| 97网址97| 色网色网色网色网色网色| se吧提供国产乱老熟视频胖女人| 亚洲精品中文字幕一区在线视频| 精品超碰中文在线| 99精品伊人| 久久久青青草| 丰满人妻一区二区三区四区| 97在线视频观看| 91麻豆天美国产| AV女资源| 91精品久久久久久综合五月天| 亚洲色图在线视频| 日韩丨制服丨中文|在线| 97爱| 另类图片五月天| 欧美78| 国产97在线 | 亚洲| 黄片国产精品一区二区| 五月天婷婷欧美三区| 天天做天天爱天天爽AV| 九久久精| 久综合网| 91插B网站| 久久国产AⅤ| 狠狠色色| 日比av无码| 家庭乱伦网站国产| 99热导航| 美国黄片aaa| 久久九九99| 久久6热精品99视频| 91中文字幕| 亚洲1区| 中文字幕AV片| 久久久亚洲高清不打码| 韩国女主播青草在线| 清纯唯美亚洲综合| 久久婷婷伊人| 五月天AV资源| 日本韩欧美在线播放a| 国产欧美日韩臀| 69精品| 香蕉婷婷| 亚洲激情久久久伊人综合| 思思热免费在线视频| 97资源超碰| 男人的天堂1024| 日韩av乱伦| 日本黄色天堂| 九九黄色网| 亚洲加勒比色图| 日欧亚洲二三区大片不卡| 日韩精品第3页| 亚洲人成网站7777| 伊人991| 亚洲色欲天天天堂色欲网女| 亚91亚洲网| 亚洲天堂五月天国产| 污到发麻的视频 国产| 日韩色| 麻豆久久视频在线地址| 天天综合网91| 啊啊啊啊啊啊好湿好爽视频| 天天弄天天操| 久久久999国产| 亚洲激情综合| 日韩偷拍一区二区三区| 久久久久久少妇| 国产女人成人精品视频| 俞拍久久国应视频| 男女激情中文字幕| 日本人人操人人操| 91亚洲欧美激情| 伊色综合天堂色97| 午夜超爽| 欧美日韩不卡传媒| 啊啊啊好湿国产一二| AV一起草在线| 久久久久96| 五月激情天| a片久久久久久久久久久久 | 99少妇| 狼天天狼天天大香蕉| 17c嫩草51久久91嫩草| 国产又大又粗又长视频在线| 一区二区三区精品视频| 农村女一级毛卡片| 国产女人9999| 精品国产一区二区三区av在线资源| 在线97视频| 乱久久久| 玖玖97综合| 性爱免费视频成人| 啊啊啊啊啊啊在线| 欧美色自拍| 国产少妇肉丝在线观看| 中国zzijzzijzzwww精品| 久久伊人影院| 欧洲自拍第一页| 国产精品经典一卡久久久 | 久久理论字幕视频| 凹凸视频特色日本特黄| 国产久久久久久| 久久精品国产AV一区二区三区| 欧美 综合| 久久草在线综合视频| 亚洲少妇在线观看| 亚洲蜜臀精品视频久久| 91在线限制级| 国产日韩精品一区二区三区| 色小视频蜜乳| 国产99久久99热这里只有精品15 | 91在线超高颜值国产| 欧美综合色图网| 天天澡天天爽日日av| 麻豆国产尤物AV| 嫩草影院性色| 人妻中文字幕精品无码| 日本欧美韩国国产在线| 日韩视频中文字幕| 欧亚 另类 久| 久久九九热| 涩涩久久精品| 亚洲色图加勒比| 中文字幕一区 二区三四五 区日 日骚| 伦伦成年午夜免费视频| 99久久婷婷丁香| 国模私拍一区二区三区神乳| 测评在线观看AV| 欧美黑人熟妇精品91| 日日AAvv| BBBBB97COM| 97久久超碰亚洲| 亚洲精品人伦一区二区| 欧美色图 人妻| 青青草在线视频人人想人人上| 99热精品在线观看| 操91| 丁香六月婷婷久久综合| 亚洲不卡AV在线| 免费看毛片操穴| 五月婷婷综合在线| 青娱乐 成人娱乐在线| 99这里只有精品| 色综合色色| 婷婷九月色| 久操热| 九九成人视频| 欧美黑人性猛交91| 人人操天天爽| 91网站18在线| 超碰欧美97资源| 国产三级中文字幕粉嫩| 欧美色图亚洲色| 97在线观看免费视频| 欧美第二页| 伊人天天久久动态图| 亚洲国产综合图区中文字幕| 搡老女人老熟女91| 国产中文字幕在线点播| 夜间福利片1000无码| 自拍偷拍 日韩无码| 手机在线观看不卡无码av| 免费啪啪啪网站18岁| 可以免费观看的AV| 男女激情中文字幕| 五月天九九日国产精品一区二区三区| 91老司机视频| 日韩欧美午夜一区二区| 亚洲第一无码播放立川理惠| 久久久久免费少妇| 欧洲精品一二三在线| 婷婷激情丁香| 日韩免费中文字幕视频| xxx0国产在线播放| 色墦五月丁香| 大香蕉欧美日韩| 色网亚洲人| 超碰97中文| 亚洲国产欧美一区二区潘金莲| 日本东京热加勒比久久| 中亚精品极乱| 韩国嫰模上门援交视频| 九九AV| 久久精品国产亚洲AV片多多 | 欧美色日| 精品国产乱码久久久久久网站入口| 欧美人与动性人交a| 色噜噜精品一区二区三| 色穴精品| 0755午夜福利视频| 国产日逼视频| 热久久91婷婷| 青青草这里只有精品| 天天干天天舔| 91美女丝袜诱惑视频| 欧美97视频| 欧美天天弄| 午夜国产成人福利视频| 美女91在线观看| 成人国产二区三区在线,男女精品。| 粉嫩av平台| 五月丁香婷婷综合网| 久久99手机免费视频| 国产精品伦理| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 一区二区偷拍拍视频| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 密乳AV免费观看| 超碰这里有精品| 日韩啊V| 色情成人五月天| 欧美日韩97在线| 欧美性爱精品七区| 国产天美欧美| 欧美激情视频一区二区| 色色色色综合网| 蜜桃精品视频一区二区三区| 99热这里都是精品| 亚洲国产无码精品首页久久久| 欧美A√综合网| 12一15性XXXX粉嫩国产| A V少妇特黄三级| 91制服丝袜| 婷婷伊人| 亚洲成成熟女人综合一区二区| 蜜乳AV一区二区三区四| 91精品国产乱码| 欧美一级特黄淫片在线观看| 欧美性爱一区二区三区四区 | 国产精品无码AV网站| 天天射夜夜| 欧美成人四级在线播放| 亚洲精品1区| 狼狼色丁香久久婷婷综合五月| 欧美78| 老司机深夜影院18未满| 久久精品男人的天堂| 国产三区免费在线观看| 国产97在线播放| 免费看日本操逼视频| 超碰九九| 偷拍欧美综合| 操啊国产| 天欧美在线| 99色婷婷| 91福利网在线观看| 在线小视频| 99超级碰免费视频| 97超碰碰| 乱子伦一区二区三区国产精品| 中文字幕一区二区韩| 久久精品综合| 97视频在线免费看| 国产在线激情视频| 四虎av在线| 欧美色图亚洲色图成人在在线| 澳门黄片一香蕉视频| 免费试看60秒| 久久久久久91香蕉国产| 亚洲色图欧美视频| 91在线视频国产网站| 精品人妻一区二区乱码一区二区| 熟女视频久久| 无码人妻精品一区二区三区99不卡| 亚洲性少妇| 五月开心网| 亚洲无码国产精品久久| 欧美日韩小说| 中出789在线视频| 综合色99| 少妇3P性爱自拍| 亚洲毛片久久| 欧美在线 亚洲| 欧美另类色图片| 国产区91柔拿会所技师| 福利视频网站| 无码人妻毛片丰满熟妇精品区| 人人妻人人操人人乐| 午夜欧美女人操逼| 色屁屁影院www国产| 亚洲 欧美 日韩另类 麻豆| av操操不卡| 91久操| 日韩一级特黄av毛片| 91另类| 91黄射| 色网在线| 九九99精品| 国产欧美在线观看免费观看| 91 综合网| 中文子幕一二三| 色5月婷婷| 黄色免费网页无码| 91九色蝌蚪在线观看| 亚洲久久久久| 天啪| 91熟女丨老女人| 亚洲精品97中文字幕| 99啪啪视频| 亚洲18禁| 久久久蜜桃一区二区三区| 日本在线播放不卡一区| 青娱乐国产精品| 久操高青| 中文字幕老熟妇黄色视频| 9999免费精彩视频| 日韩黄色成人性爱| 高清无码国产亚洲| 欧美刺激色黄片免费看| 熟女人妻一区二区三区| 无码人妻丰满热妇又大又粗| 亚洲无吗在线视频| 亚洲中文日韩欧美大香蕉视频| 老子午夜伦不卡影院| 色在线视频导航| 国产一区二区二区按摩精品啪视频| 亚洲色电影在线| 91欧美经典| 亚洲黄色| 亚洲色图欧美一区二区不卡| 人人么人人操| 无码免费在线观看黄色片| 影音先锋每日最新资源在线观看 | 蜜桃精品一区二区三区ww| 又大又黄国产| 殴美综合色88| 少妇内射www在线观看视频| 粉嫩AV输入| 60秒免费视频| 男人的天堂com| 97视频免费播放| 亚洲男人天堂网| 午夜男女爽爽大片免费观看| 亚洲精品乱码线路中文字幕| 免费作爱一级视频| 色情五月综合婷婷| 欧美日韩国产电影| 俺去啦自拍| 東南亚性呦成人伦理资源在线视频| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 麻豆熟妇乱妇熟色A片在线看| 亚洲成人ab| 人人干人人操人人爱| 大香蕉黄色一级片免费看| 新婚人妻扶着粗大强行坐下| 午夜免费视频1000| 精品一久久久| 91天美免费| 一区二区三区美女超清| 国产精品蜜乳AV| 国产精品色色| #NAME?| 91色婷婷综合久久中文字幕二区| 五月天激情小说| 少妇六月天| 天天操天天干美女网址导航| 日韩欧美亚欧在线视频| 日美免费黄片| 人妻精品4K4K4K4K4| 国产丸一视频| 人妻精品视频一区二区三区 | 欧美日韩亚洲天堂网| 久久风骚城市人| 亚洲国产成人7777| a在线观看| 亚洲中文字幕日产无码久久| 亚洲男人天堂2017| 久久精品国产亚洲AV嘿嘿| 素人播放一区| 一本色道久久综合狠狠操| 亚洲一区日韩精品| 91一区二区| 欧美一品道| 翔田千里无码一区| 国产 日韩 欧美 人妻 熟女 中文| 91精品国久久久久久无码| 麻豆成人影音在线| 91人人臊| 土豪酒店各种姿势玩弄极品幼稚| 在线αⅴ| 九九九午夜| 精品传媒在线一区| 色婷婷五月综合激情中文字幕| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 久草精品一区 | 江都AV在线| 中文字幕乱亚洲美女精品一区| 欧美网站免费| 精品中文一区二区| 特级特黄一级毛片免费| 亚洲最大黄网| 亚洲人成在线放东京热| 欧美一级三级| 老鸭窝成人免费毛片视频| 免费看久久久性性| 搡老熟女国产1000部| 嗯啊抽插大香蕉网页| 神马午夜久久久| 综合伊人激情| 中文久久一区| AV一起草在线| 加勒比综合九九99视频在线播放| 亚洲一区日韩精品中文字幕| 国精品一区二区三| 秋霞一级鲁丝片A片| 少妇国产不卡| 人人干黄色| 午夜欧美神马久久久久| 亚洲熟女精品| 亚洲欧美日韩电影网站一区 | 96精品久久久| 五月天综合| 人妻少妇精品视频一区二区三区| 男人的天堂2010| 精品九九| 欧洲一区二区三区免费| 一区二区三区探花在线观看| 丝袜色综合| 欧美啪啪女女| 亚洲人妻久久| 国产精品久久久蜜臀| 日逼逼免费看| 日韩av电影网站| 色999五月色| 欧美综合亚洲综合| 91网站18在线| 亚洲精品a人片在线观看视| 欧美97免费| 日韩欧美女优电影| 日韩无码三级影院| 亚洲乱熟女一区二区| 91一区二区| 欧美大香蕉久| 国内精品久9| 91欧美高清| 久操com| 啊啊啊骚| 青青草在线视频欧美| 爱av免费| 人人弄人人摸| 四季av一区二区凹凸精品小说| 蜜桃久久综合视频| 超碰在线香蕉| 屁股久久久久久| 狠狠亚洲| 九九热九九热| 久久精品国产亚洲AV片多多| 大香蕉78| 自拍第一页| 欧美在线色图| 啊v视频在线观看| 久久久精品电影| 蜜区区视频79 | 操啊国产| 日本欧美不卡| 亚洲伊人久久精品影院| 午夜精品一区二区三区三上悠亚| 伊人久久综合精品欧美| 98久久| 精品超碰色| 丁香婷婷激情五月天无毒不卡 | 亚洲欧美999| 欧美草草| av一区二区三区四区五区久草臀| 长长久久88视频| 久久久久久精品免费看A级| 日韩精品在线视频,日韩精品……| 91欧美性| 夜夜嗨av午夜成人| 96AV精品| 五月丁香综合| 色婷婷五月综合激情中文字幕| 日韩性爱视频在线免费观看| 97这里只有精品| 亚洲精品国产拍免费91在线| 久久6热精品99视频| 欧美综合第一| 九九天堂| 91oumei| 婷婷六月色| 中文字幕在线高清男人的天堂| 又粗又长又爽在线观看| 精品国产三级av韩国在线| 综合 亚洲 欧美| 亚洲 日本 不卡| 自拍啪啪视频| 91模特在线观看| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 韩日男人的天堂| 天天操狠狠日夜夜干超碰撸com视频在线观看| 国产美女mm131爽爽爽爽| 手机看片日韩人妻| 欧美的性爱网站免费| 少妇熟女1区2区3区| 国产精品女aA片爽爽视频| 中文字幕第2页| 亚洲黄色AV电影| 天天干18禁| 成人怡红院| 九九AV| 熟女乱3伦999| 亚洲国产精品V?在线播放| 国产精品久久久啊| 97超碰人人操人人操| 成人精品无码| 亚洲性爱乱操x| 日逼视频日本| 蜜乳AV一区二区三区四| 黄色一级视| 操91| 青青草视频爽一爽| 中出789在线视频| 久久视频少妇美女| 亚洲精品久久久久久| 综合熟妇一区二区三区| 97人人爱人人乐| 亚洲色人| 亚洲国产91精品一区二区久久| 精品无码久久久久久国产浪潮| 性久久| 日本免费亚洲欧美| 欧美九9 9 9| 亚洲综合码| 囯产精品强| 在线视频资源| 乱伦熟女专区| 俺去俺来也在线www| 婷婷色网| 欧美白嫩在线放| 日韩丨制服丨中文|在线| 久久99干一本高清| 国产精品人妻无码久久久互動交流| 欧美gv在线观看| 国产综合网站在线播放 | 欧美最婬乱婬爆婬牲视频| 特色a在线上| 免费一级特黄特色大片在线观看看| 国产无码一二三区| AV色天香在线| 最新9久久久9免费视频| 欧美中文综合| 八人操人人摸人人看| 婷婷尹人大香蕉免费| 91网站视频在线观看| 日韩AV噜噜噜一区二区三区四区| 思思热一热婷婷热一热| 天天做日日爱夜夜爽| 999久久久九| 国产精品97超碰| 亚洲天堂在线怕怕视频 | 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 99啪啪视频| 久久久久久无码人妻中文字幕| 精品国产乱码久久| 一级久久久久久久久久久| 狠狠躁AV| 国内毛片四区| 国产女人和拘做爰视频 | 翔田千里AV无码秘 三区| 夜色AV无码手机在线影院| 亚洲 中文 女同| 亚洲中文字幕久久无码精品| 人人操人人色人人摸| 丁香五月天啪啪| 婷婷九月国产| xxxx网站亚洲精品| 超AV色女| 男人天堂东京热| 麻豆国产免费影片| a片亚洲一本通视频| 97超碰碰| 色综合一区二区三巨| 97伊人超碰| 日本女优在线视频福利| 天天综合有色网| 好色综合| 91N欧美| 激情欧美97| 免费看日本操逼视频| 色婷婷一区二区三区久久午夜 | 97超碰色中文字幕| 亚洲精品毛片在线观看| 久久久久七视频| 日韩熟女操逼| 中美日韩毛片| 韩国三级一线观看久| 97色五月天完| 男人天堂网址| 久久欧美1卡2卡3| 在线日韩日本亚洲国产| 91亚·色| 日语五十路和六十路亚洲国产精品| 女优免费一区二区永久| 色臀AV| 国产精品人妻无码久久久老鸭窝| 激情久久av一区av二区av| 欧美韩国你懂得在线| 亚洲精品成人动漫在线| 免费人人搞97| 国产精品午夜福利亚洲综合网| 又黑又大又粗| 一起草三级AV电影在线观看| 爆乳免费黄网站| 亚洲中文字幕在线视频一区二区| 欧亚综合一卡二卡中文字幕| 亚洲欧美综合| 妇女视频网站| 超碰在线观看av不卡| 天堂网 主播 亚洲| 亚洲精品aa久久伊人| 夜夜嗨一区| 曰韩精品九九无码| 狠狠婷婷亚洲中文综合久久| 色情亚洲日本成人| 亚洲精品国产熟女| 亚洲人成色9999精品久久| 思思热影视| 天操天操夜操夜月月年年操操 | 中文字幕老熟妇黄色视频| 好爽免费视频| 欧美天天综| www.91理论| 精品少妇一区二区| 熟女人妻av在线资源,黄色的资源 粉嫩国产精品久久粉嫩 | 久久色网| 福利在线视频一区二区| 欧美一级黄片免费播放| 精品人妻一区二区三区日产| 情色av电影| 国产精品视频白浆免费| 亚洲人妻精品一区二区| 夜夜嗨AV蜜臀av| 逼逼逼逼操操操操操操操操操午夜剧场 | 97久久天天综合色天天综合色电影| 九九性爱网| 97爱爱| 国产热av| 日韩精彩免费| 手机看av网站在线看| 99在线精品视频| 性性久久| 日韩AV片| 亚洲成熟国产精品美女| 久热一区二区| 日本精品九九九| 青青草日本无码| 在线观看色视频| 91视频综合网| 亚洲女人毛茸茸91| 精品v1区| 亚洲另类在线观看| 日本三级久| 亚洲性爱免费电影| 精品午夜福利| 精品人妻视频一区二区在线播放| 性欧美另类高清| 欧美精品久久久久久久久88| 中国一级αV| 亚洲精品久久久久久| 超碰性爱97| 天天干一干| 国产欧美岛国精品一区| 欧美一区二区男人天堂| 久热这里| 日本精品九九九| 嫩草伊人久久精品| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 欧美亚洲20p| 久久精品国产亚洲AV高级北京| 91久久久久久久久18| 91精品国产乱码| 97超久碰| 亚洲色图激情小说| 日本国产成人亚洲精品无码| 国产黄片精品在线| 麻豆国产97在线| 麻豆AV一区二区天美传媒| 日韩国产九九精品一区二区三区毛片| 99久久这里只有精品| 色情综合| 日本在线视频导航| 黄片aaaaa一区| 做爱A级亚欧| 欧美一区二区福利在线| 无遮挡又黄又刺激的视频| 精品久久久久久久| 亚洲小说视频| 漂亮人妻被强中文字幕hd| 国产丝袜高跟美女av免费观看| 精品一久久久| 久久精9| 欲香欲色天天天综合和网| 在线人妻熟女一区二区三区四区五区| 日本在线一二| 欧日韩不卡视.频| 亚洲无码99| 夜夜操狠狠操| 看日韩美女二区三区免费操逼视频| 色五月激情综合网| 午夜一区| 日韩另类色图| 中日无幕一二三四区| 色哟哟国产精品免费网址| 麻豆黄色五月天| 久久精品亚洲东京热色播| 啊啊啊好湿久久| 久久精品视频28| 9999九九九久久久| 本道在线| 清纯唯美激情| 国产精品点击进入在线影院高清| 久久亚洲AV无码白度| 波多野结衣AV无码一区| 操逼免费视频无码国产| 欧亚乱色熟女一区二区| 你懂得91| 综合色图亚洲欧美| 一区二区三区男女操逼黄色小电影| 91亚洲影院综合| 五月天加勒比啪| 亚洲AV永久无码精品成人调教| 欧美在线电影| 在线日韩精品一区二区三区| 一区操逼| 美女被艹尤物视频| 亚州情色j区| 久久久久ab| 少妇熟女视频一区二区三区| 亚洲丝袜少妇在线| 91欧美高清| 欧美成不卡网| 97操综合| 91色色网站| 91c色| 人妻熟女字幕一区二区| 啊啊啊啊二区好大| 热热色青青草| 精品人妻免费观看| 久久性爱大全| 欧美亚男人的天堂| 亚洲色图 综合| 熟女人妻一区二区三区| 久久综合国产精品国产| 色色五月婷| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 久久久久久久久久久999| 2019男人的天堂| 天天影视色香欲综合网小说| 91操人| 九九九久千久久激情蜜桃在线看| 99re6国产精品99re| 9久精品| 国产精品自产拍在线观看社区| 高凊专区人人操| 亚洲综合另类色图| 日韩性爱免费观看视频| 色色婷婷丁香| 亚洲大胆人体av| 啪啪综合网| av片在线观看免费播放| 亚洲综合影片| 欧美色图综合网| 亚欧Av| 国产精品一区二区三区免费视频| 日本不卡一二区| 丰满岳乱妇一区二区三区| 欧美日不卡| 婷婷20月天青娱乐| 综合免费无码中文| 天天日天天舔东京热| 精品传媒在线一区| 综合欧美日本三级| 久草在| 日韩在线欧美精品一区二区| 五月天激情综合网| 97精品在线| 国内精品a| 日本不卡码黄色| 精品78| 黑操B| 天堂性色| 日本高清久久| 九九这里只有精品| 国产精品自拍xxxx| 国产福利夜| 亚洲本色精品一区二区久久| 99热66| 久久高潮妇女视频| 色999亚洲人成色| 亚洲天在线| 91性高潮久久久久久久久| 蜜乳av一区二区三区四区不卡| 国产日韩欧美操逼视频| 中文字幕加勒比海高清无码免费视频| 青青草福利视频| 天天综合,91综合永久| 日韩有码专区| 九九热最新| 久久9精品| 中文字幕高清20页视频| 中国和日本人色哪个不下载能放| 中文字幕亚洲在线一区| 日韩射图| 99热18| 亚洲无 码A片在线观看麻豆| 综合影院亚洲| 天天影视色香欲综合网小说| 欧美激情视频一区二区三区不卡| 成人五月天丁香激情综合| 人妻天天爽夜夜爽精品2| 国产主播福利| 九九九影院| 人人操人人叉人人插人人| 亚洲麻豆18发?| 精品-91人妻子系列| 中国少妇啪啪视频| 殴美牲| 欧美一级AAAAAAA| 无码人妻精品一区二区三区九九 | 不卡九肏| 亚洲瓯美色图| 91精品久久久久五月天精品| 久草精品一区| 亚洲午夜av| 日韩三级伊人| 成人一区二区三区四区| 亚洲国产精品成人无码久久久| 亚洲狠狠入| 天天淫人人妻日日色| 青娱乐欧美激情一区二区| 亚洲精品人伦一区二区| 99热精品在线播放| 精品人妻中文字幕高清| 久久久久久久久久精| 九九aV| 亚洲一区操| 国产夫妻性生活视频| 四虎永久在线精品免费网址 | 97bbn| 人人人人人人少妇| 26UUU欧美激情一区二区| 亚洲日韩97| 怡红院怡春院| 被体育老师抱着c到高潮| 日韩欧美加勒比| 亚洲一区亚洲天堂| 98一区二区精品| 人干人人人操人人摸| 亚洲小说视频| 蜜屁Av| 97人肏| 久久男女激情视频网站| 亚洲av噜噜噜噜噜噜| 欧美偷偷网| 久久婷婷在线观看视频| 亚洲一区中文字幕一区| 乱伦一二三区| 欧美激情精品| AV色图| 草伊人高潮喷水超碰| 国产自偷自拍一区| 国产野战露脸在线播放| 久久久久久久9| 色偷偷超碰亚洲| 久久久久久久78| 六九九九| 国产精品久久久三级无码| 久久久久久久久久va| 青青草好吊色| 久久久久久中文| 欧美夜夜骑视频| 91人妻视频在线| 99精品在线观看| 91人妻尻屄视频| 久久五十路熟女人妻| 综合网天天| 熟妇人妻丰满久久久久久久无码 | 操逼网免费无码视频| 亚洲熟女精品| 日韩一级性爱无码| 啊啊啊啊啊啊好多水| 麻豆天天躁天天揉揉AV| 91亚洲丝袜| 精品国产国产AV| 麻豆天美制片厂网站视频| 亚州色图第三区| 五月婷婷色色| 色小视频蜜乳| 五月丁香社区婷婷日韩欧美精品影院 | 91精品无码久久久久久久| 天堂性色| 99rre在线精品99re8| 日本一级不卡一二区| 天天日天天屌天天操| 人人综合| 久久天天躁日日躁狠狠躁 | 九九九偷拍| 国产深喉| 四虎884| 日本2020一区二区| 91M一社| 91亚洲网站| 伊人91| 欧美激情综合| 欧美日韩国产成人高清| 欧美精品成人一区二区在线观看 | 开心激情婷婷| 艹我哪美一区无码| 91oumei| 人人手机欧洲亚洲国产人妻| 超碰97精品在线| 加勒比伊人综合| 日夜干射色啊| 啊啊啊啊啊啊啊在线| 人妻激情在线视频| 日本一级不卡一二区| 一区e区三| 青青青在线高清视频在线一二三四区 | 中文字幕在线2| 激情情色五月天| 一区二区三区麻豆|