精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

設計模式系列 - 單例模式

開發 前端
我不知道大家工作或者面試時候遇到過單例模式沒,面試的話我記得我當時在17年第一次實習的時候,就遇到了單例模式,面試官是我后來的leader,當時就讓我手寫單例,我記得我就寫出了餓漢式,懶漢式,但是并沒說出懶漢和惡漢的區別,當時他給我一通解釋我才知道了其中的奧秘。

[[384482]]

本文轉載自微信公眾號「三太子敖丙」,作者三太子敖丙。轉載本文請聯系三太子敖丙公眾號。

我不知道大家工作或者面試時候遇到過單例模式沒,面試的話我記得我當時在17年第一次實習的時候,就遇到了單例模式,面試官是我后來的leader,當時就讓我手寫單例,我記得我就寫出了餓漢式,懶漢式,但是并沒說出懶漢和惡漢的區別,當時他給我一通解釋我才知道了其中的奧秘。

寫這篇文章之前我刻意的在我手上的項目里面去找了找,我發現單例在每個項目里面都有運用到,而且我后面所說的幾種實現還基本上都涉及了,還挺有意思的。

開篇我就給大家一個思考題:為什么不用靜態方法而不用單例模式?

問題的答案我會在最后公布,大家可以帶著問題看下去,看看大家的思考是不是跟我一樣的。

大家肯定也能經常聽到身邊的同學說單例很簡單,自己也會,但是真到自己的時候你能就一個知識點講的很透徹,并且能夠發散思考引出更多的答案嗎?或者能說出他每種模式更適合的場景么?這是值得深思的。

首先給單例下一個定義:在當前進程中,通過單例模式創建的類有且只有一個實例。

單例有如下幾個特點:

  • 在Java應用中,單例模式能保證在一個JVM中,該對象只有一個實例存在
  • 構造器必須是私有的,外部類無法通過調用構造器方法創建該實例
  • 沒有公開的set方法,外部類無法調用set方法創建該實例
  • 提供一個公開的get方法獲取唯一的這個實例

那單例模式有什么好處呢?

  • 某些類創建比較頻繁,對于一些大型的對象,這是一筆很大的系統開銷
  • 省去了new操作符,降低了系統內存的使用頻率,減輕GC壓力
  • 系統中某些類,如spring里的controller,控制著處理流程,如果該類可以創建多個的話,系統完全亂了
  • 避免了對資源的重復占用

好了,單例模式的定義也清楚了,好處也了解了,先看一個餓漢式的寫法

餓漢式

  1. public class Singleton { 
  2.   // 創建一個實例對象 
  3.     private static Singleton instance = new Singleton(); 
  4.     /** 
  5.      * 私有構造方法,防止被實例化 
  6.      */ 
  7.     private Singleton(){} 
  8.     /** 
  9.      * 靜態get方法 
  10.      */ 
  11.     public static Singleton getInstance(){ 
  12.         return instance; 
  13.     } 

之所以叫餓漢式大家可以理解為他餓,他想提前把對象new出來,這樣別人哪怕是第一次獲取這個類對象的時候直接就存在這個類了,省去了創建類這一步的開銷。

等我介紹完懶漢之后,對比一下大家就知道兩者的區別,以及各自適用在什么場景了。

懶漢式

線程不安全的模式

  1. public class Singleton {   
  2.     private static Singleton instance;   
  3.     private Singleton (){}   
  4.    
  5.     public static Singleton getInstance() {   
  6.     if (instance == null) {   
  7.         instance = new Singleton();   
  8.     }   
  9.     return instance;   
  10.     }   

懶漢式大家可以理解為他懶,別人第一次調用的時候他發現自己的實例是空的,然后去初始化了,再賦值,后面的調用就和惡漢沒區別了。

懶漢和惡漢的對比:大家可以發現兩者的區別基本上就是第一次創作時候的開銷問題,以及線程安全問題(線程不安全模式的懶漢)。

那有了這個對比,那他們的場景好理解了,在很多電商場景,如果這個數據是經常訪問的熱點數據,那我就可以在系統啟動的時候使用惡漢模式提前加載(類似緩存的預熱)這樣哪怕是第一個用戶調用都不會存在創建開銷,而且調用頻繁也不存在內存浪費了。

而懶漢式呢我們可以用在不怎么熱的地方,比如那個數據你不確定很長一段時間是不是有人會調用,那就用懶漢,如果你使用了惡漢,但是過了幾個月還沒人調用,提前加載的類在內存中是有資源浪費的。

線程安全問題

上面的懶漢我是故意沒加鎖的,大家肯定都知道懶漢的線程安全問題的吧?

???忘了?那好吧,暖男帶你回憶一波吧。

 

在運行過程中可能存在這么一種情況:多個線程去調用getInstance方法來獲取Singleton的實例,那么就有可能發生這樣一種情況,當第一個線程在執行if(instance==null)時,此時instance是為null的進入語句。

在還沒有執行instance=new Singleton()時(此時instance是為null的)第二個線程也進入了if(instance==null)這個語句,因為之前進入這個語句的線程中還沒有執行instance=new Singleton(),所以它會執行instance = new Singleton()來實例化Singleton對象,因為第二個線程也進入了if語句所以它會實例化Singleton對象。

這樣就導致了實例化了兩個Singleton對象,那怎么解決?

簡單粗暴,加鎖就好了,這是加鎖之后的代碼。

  1. public class Singleton { 
  2.     private static Singleton instance = null
  3.     /** 
  4.      * 私有構造方法,防止被實例化 
  5.      */ 
  6.     private Singleton(){} 
  7.     /** 
  8.      * 靜態get方法 
  9.      */ 
  10.     public static synchronized Singleton getInstance(){ 
  11.         if(instance == null){ 
  12.             instance = new Singleton(); 
  13.         } 
  14.         return instance; 
  15.     } 

這是一種典型的時間換空間的寫法,不管三七二十一,每次創建實例時先鎖起來,再進行判斷,嚴重降低了系統的處理速度。

有沒有更好的處理方式呢?

有,通過雙檢鎖做兩次判斷,代碼如下:

  1. public class Singleton { 
  2.     private static Singleton instance = null
  3.     private Singleton(){} 
  4.     public static Singleton getInstance(){ 
  5.         //先檢查實例是否存在,如果不存在才進入下面的同步塊 
  6.         if(instance == null){ 
  7.             //同步塊,線程安全的創建實例 
  8.             synchronized (Singleton.class) { 
  9.                 //再次檢查實例是否存在,如果不存在才真正的創建實例 
  10.                 if(instance == null){ 
  11.                     instance = new Singleton(); 
  12.                 } 
  13.             } 
  14.         } 
  15.         return instance; 
  16.     } 

將synchronized關鍵字加在了內部,也就是說當調用的時候是不需要加鎖的,只有在instance為null,并創建對象的時候才需要加鎖,性能有一定的提升。

但是,這樣就沒有問題了嗎?

看下面的情況:在Java指令中創建對象和賦值操作是分開進行的,也就是說instance = new Singleton();語句是分兩步執行的。

但是JVM并不保證這兩個操作的先后順序,也就是說有可能JVM會為新的Singleton實例分配空間,然后直接賦值給instance成員,然后再去初始化這個Singleton實例。

這樣就可能出錯了,我們以A、B兩個線程為例:

A、B線程同時進入了第一個if判斷

A首先進入synchronized塊,由于instance為null,所以它執行instance = new Singleton();

由于JVM內部的優化機制,JVM先畫出了一些分配給Singleton實例的空白內存,并賦值給instance成員(注意此時JVM沒有開始初始化這個實例),然后A離開了synchronized塊。

image-20201212010622553

 

B進入synchronized塊,由于instance此時不是null,因此它馬上離開了synchronized塊并將結果返回給調用該方法的程序。

此時B線程打算使用Singleton實例,卻發現它沒有被初始化,于是錯誤發生了。

加上volatile修飾Singleton,再做一次優化:

  1. public class Singleton { 
  2.     private volatile static Singleton instance = null
  3.     private Singleton(){} 
  4.     public static Singleton getInstance(){ 
  5.         //先檢查實例是否存在,如果不存在才進入下面的同步塊 
  6.         if(instance == null){ 
  7.             //同步塊,線程安全的創建實例 
  8.             synchronized (Singleton.class) { 
  9.                 //再次檢查實例是否存在,如果不存在才真正的創建實例 
  10.                 if(instance == null){ 
  11.                     instance = new Singleton(); 
  12.                 } 
  13.             } 
  14.         } 
  15.         return instance; 
  16.     } 

**通過volatile修飾的變量,不會被線程本地緩存,所有線程對該對象的讀寫都會第一時間同步到主內存,從而保證多個線程間該對象的準確性 **

volatile的作用

  • 防止指令重排序,因為instance = new Singleton()不是原子操作
  • 保證內存可見

這個是比較完美的寫法了,這種方式能夠安全的創建唯一的一個實例,又不會對性能有太大的影響。

但是由于volatile關鍵字可能會屏蔽掉虛擬機中一些必要的代碼優化,所以運行效率并不是很高,還有更優的寫法嗎?

通過靜態內部類

  1. public class Singleton {   
  2.    
  3.     /* 私有構造方法,防止被實例化 */   
  4.     private Singleton() {   
  5.     }   
  6.    
  7.     /* 此處使用一個內部類來維護單例 */   
  8.     private static class SingletonFactory {   
  9.         private static Singleton instance = new Singleton();   
  10.     }   
  11.    
  12.     /* 獲取實例 */   
  13.     public static Singleton getInstance() {   
  14.         return SingletonFactory.instance;   
  15.     }   
  16.    
  17.     /* 如果該對象被用于序列化,可以保證對象在序列化前后保持一致 */   
  18.     public Object readResolve() {   
  19.         return getInstance();   
  20.     }   
  21. }   

使用內部類來維護單例的實現,JVM內部的機制能夠保證當一個類被加載的時候,這個類的加載過程是線程互斥的。

這樣當我們第一次調用getInstance的時候,JVM能夠幫我們保證instance只被創建一次,并且會保證把賦值給instance的內存初始化完畢, 這樣我們就不用擔心上面的問題。

同時該方法也只會在第一次調用的時候使用互斥機制,這樣就解決了低性能問題。這樣我們暫時總結一個完美的單例模式。

還有更完美的寫法嗎,通過枚舉:

  1. public enum Singleton { 
  2.     /** 
  3.      * 定義一個枚舉的元素,它就代表了Singleton的一個實例。 
  4.      */ 
  5.     Instance; 

使用枚舉來實現單實例控制會更加簡潔,而且JVM從根本上提供保障,絕對防止多次實例化,是更簡潔、高效、安全的實現單例的方式。

最后這種也是我最青睞的一種(代碼少)。

總結

最后大家應該都知道單例模式的寫法了,也知道優劣勢和使用場景了,那開頭的那個問題大家心里有答案了么?

什么?連問題都忘了?問題:為什么不用靜態方法而不用單例模式?

兩者其實都能實現我們加載的最終目的,但是他們一個是基于對象,一個是面向對象的,就像我們不面向對象也能解決問題一樣,面向對象的代碼提供一個更好的編程思想。

如果一個方法和他所在類的實例對象無關,那么它就應該是靜態的,反之他就應該是非靜態的。如果我們確實應該使用非靜態的方法,但是在創建類時又確實只需要維護一份實例時,就需要用單例模式了。

我們的電商系統中就有很多類,有很多配置和屬性,這些配置和屬性是一定存在了,又是公共的,同時需要在整個生命周期中都存在,所以只需要一份就行,這個時候如果需要我再需要的時候new一個,再給他分配值,顯然是浪費內存并且再賦值沒什么意義。

所以我們用單例模式或靜態方法去維持一份這些值有且只有這一份值,但此時這些配置和屬性又是通過面向對象的編碼方式得到的,我們就應該使用單例模式,或者不是面向對象的,但他本身的屬性應該是面對對象的,我們使用靜態方法雖然能同樣解決問題,但是最好的解決方案也應該是使用單例模式。

資料參考:《java設計模式》、《為什么要用單例模式?》

 

好啦以上就是本期的全部內容,我是敖丙,你知道的越多,你不知道的越多,我們下期見。

 

責任編輯:武曉燕 來源: 三太子敖丙
相關推薦

2013-11-26 16:20:26

Android設計模式

2022-02-06 22:30:36

前端設計模式

2021-02-01 10:01:58

設計模式 Java單例模式

2016-03-28 10:23:11

Android設計單例

2022-06-07 08:55:04

Golang單例模式語言

2024-02-04 12:04:17

2015-09-06 11:07:52

C++設計模式單例模式

2021-08-11 17:22:11

設計模式單例

2022-09-29 08:39:37

架構

2020-11-03 13:05:18

命令模式

2020-11-04 08:54:54

狀態模式

2020-10-23 09:40:26

設計模式

2022-01-12 13:33:25

工廠模式設計

2022-03-29 07:52:07

設計模式單例設計模式java

2021-09-07 10:44:35

異步單例模式

2024-03-06 13:19:19

工廠模式Python函數

2020-10-20 13:33:00

建造者模式

2012-01-13 15:59:07

2021-10-28 19:09:09

模式原型Java

2021-10-26 00:21:19

設計模式建造者
點贊
收藏

51CTO技術棧公眾號

啪一啪鲁一鲁2019在线视频| 亚洲国产精品大全| 欧美美女黄色网| 天堂在线观看av| 麻豆传媒一区二区三区| 久久久这里只有精品视频| 免费看污片网站| 国产麻豆精品| 在线亚洲一区观看| 国产又粗又猛又爽又黄的网站| 欧美日韩国产中文字幕在线| 精品一区二区三区在线观看| 国产91精品高潮白浆喷水| 中文字幕在线观看2018| 欧美热在线视频精品999| 日韩精品在线网站| 浓精h攵女乱爱av| 男人久久天堂| 亚洲一区视频在线观看视频| 亚洲高清不卡一区| 欧美日韩影视| 北岛玲一区二区三区四区| 91日本视频在线| 免费在线不卡av| 国产欧美欧美| 久久久久亚洲精品| 国产一区二区视频在线观看免费| 久久av资源| 亚洲精品一区av在线播放| japan高清日本乱xxxxx| 欧美视频免费看| 在线免费观看视频一区| 亚洲精品无码久久久久久| 牛牛在线精品视频| 一区二区三区精密机械公司| 91免费网站视频| 日韩精品毛片| 国产精品麻豆久久久| 欧美日韩亚洲在线| 色视频免费在线观看| 成人免费高清视频| 国产精品jizz视频| 欧美一区二区在线观看视频| 国产成人aaa| 97人人干人人| 成人av手机在线| 国产成人精品亚洲日本在线桃色| 91人人爽人人爽人人精88v| 一级爱爱免费视频| 麻豆国产精品视频| 91精品一区二区| 国产精品自偷自拍| 国产真实乱偷精品视频免| 成人网在线观看| 国产免费高清av| 国产福利91精品一区二区三区| 亚洲一区二区三区毛片| www.蜜臀av| 处破女av一区二区| 精品人伦一区二区三区 | 欧美日韩国产成人在线免费| 日韩欧美xxxx| 另类一区二区| 欧美一区二区精美| 人妻互换一二三区激情视频| 久久99精品国产自在现线| 日韩精品在线免费| 五月婷六月丁香| 色97色成人| 色综合色综合网色综合| 国产大片中文字幕| 国产精品综合| 国产精品高清在线观看| 97超碰资源站| 国产白丝精品91爽爽久久| 国产一区再线| melody高清在线观看| 亚洲欧洲av一区二区三区久久| 日本精品福利视频| 理论片午夜视频在线观看| 欧美在线观看视频一区二区| 91香蕉视频免费看| 天天躁日日躁狠狠躁欧美巨大小说 | 亚洲人成色777777老人头| 国产欧美精品一区| 日韩精品福利片午夜免费观看| av伦理在线| 91国产精品成人| 少妇高潮一69aⅹ| 少妇一区二区三区| 久久久www成人免费精品张筱雨| 久久99久久久| 日韩电影一区二区三区四区| 99精品国产一区二区| 国产在线黄色| 亚洲图片欧美色图| 美女网站色免费| 欧美黄色网视频| 播播国产欧美激情| 国产精品久久久久久99| 青青草97国产精品免费观看| 国产精品日本一区二区| 婷婷在线视频| 日韩欧美在线字幕| 美女日批在线观看| 日韩av免费大片| 欧美伊久线香蕉线新在线| 99国产精品欲| 欧美精彩视频一区二区三区| 一区二区在线观看免费| 久久综合福利| a级毛片免费观看在线| 亚洲h精品动漫在线观看| 日本超碰在线观看| 外国精品视频在线观看 | 成人免费看片网址| 在线观看免费版| 欧美日韩亚洲视频一区| 中文字幕一二三| 99re久久最新地址获取| 欧美最近摘花xxxx摘花| 肥臀熟女一区二区三区| 成人免费在线视频| 波多结衣在线观看| 免费av一区| 66m—66摸成人免费视频| 精品美女www爽爽爽视频| ...中文天堂在线一区| 手机看片福利日韩| 国产99久久久国产精品成人免费| 国模私拍视频一区| 亚洲精品国产suv一区| 亚洲欧美激情插| 精品综合久久久久| 日韩av免费大片| 国产精品久久一区| h视频网站在线观看| 欧美性色欧美a在线播放| 日韩丰满少妇无码内射| 在线观看的日韩av| 国产一区免费在线| 欧美a级在线观看| 日韩久久久久久| 九九久久免费视频| 国产成人综合亚洲网站| 99热这里只有精品免费| 2021年精品国产福利在线| 欧美人与性动交| 亚洲AV无码成人片在线观看 | av日韩在线播放| 欧美高清性猛交| 亚洲欧美另类日韩| 亚洲电影在线免费观看| 亚洲一区二区三区综合| 国产日韩欧美一区在线 | 91久久亚洲| 久久精品99| 新片速递亚洲合集欧美合集| 亚洲区在线播放| 中国女人真人一级毛片| 中文字幕欧美一区| 中国男女全黄大片| 亚洲一区自拍| 亚洲一区三区视频在线观看| 在线欧美激情| 久久久久久中文| 日本人妖在线| 欧美人狂配大交3d怪物一区| 久久高清内射无套| 91亚洲午夜精品久久久久久| 爆乳熟妇一区二区三区霸乳| 久久久久久免费视频| 国产精品大全| 97精品国产99久久久久久免费| 久久久国产一区二区三区| 亚洲风情第一页| 色综合激情久久| 污软件在线观看| 99re这里只有精品首页| 国产wwwxx| 激情欧美日韩一区| 日韩视频专区| 在线精品视频一区| 国产精品9999| 91jq激情在线观看| 永久免费精品影视网站| 亚洲黄色a级片| 在线观看日韩av先锋影音电影院| 老女人性淫交视频| 精品国产不卡一区二区| 一本色道**综合亚洲精品蜜桃冫| 成年人视频软件| av午夜一区麻豆| 天堂av2020| 丝袜美腿亚洲一区| 欧美另类videosbestsex日本| 精品国产一区二区三区四区| 国产99在线播放| 久久久久伊人| 日本高清视频精品| 丁香花在线电影| 色哟哟亚洲精品一区二区| 色窝窝无码一区二区三区成人网站| 欧美性生交片4| 毛片在线免费视频| 夜夜揉揉日日人人青青一国产精品| www在线观看免费视频| 成人一区在线观看| 亚洲天堂av一区二区| 麻豆亚洲精品| 久久久久久免费看| 亚洲国产一区二区在线观看| 日本在线免费观看一区| 卡通动漫精品一区二区三区| 亚洲伊人久久大香线蕉av| a∨色狠狠一区二区三区| 98精品国产高清在线xxxx天堂| 国产激情视频在线观看| 中文欧美在线视频| 九色网友自拍视频手机在线| 亚洲国产精品国自产拍av秋霞| 99国产在线播放| 欧美疯狂做受xxxx富婆| 中文字幕精品在线观看| 色狠狠综合天天综合综合| 日韩精品人妻中文字幕| 亚洲综合一区二区精品导航| 午夜国产福利一区二区| 亚洲欧洲在线观看av| 成人午夜免费影院| 国产精品网站导航| 呻吟揉丰满对白91乃国产区| 国产欧美精品在线观看| 人妻视频一区二区| 国产精品视频yy9299一区| 手机看片福利视频| 蜜桃tv一区二区三区| 精品中文字幕久久久久久| 99国产精品久久久久久久成人 | 奇米影视亚洲狠狠色| 黄色激情在线播放| 亚洲3p在线观看| 在线观看福利电影| 日本精品久久久| 自拍偷拍欧美视频| 人人澡人人澡人人看欧美| 成人免费短视频| 国产精品国产福利国产秒拍| 美女视频一区| 91精品啪aⅴ在线观看国产| 亚洲成人精品综合在线| 亚洲xxxx在线| 久久久伦理片| 欧美激情国产日韩| 日韩免费一区| 青少年xxxxx性开放hg| 一区二区三区在线电影| 久久这里只有精品18| 亚洲欧洲另类| 男人舔女人下面高潮视频| 免费一级片91| 91精产国品一二三| 91美女在线观看| 人人妻人人澡人人爽| 亚洲色图制服丝袜| 国产午夜视频在线播放| 欧美视频国产精品| 国产露脸无套对白在线播放| 欧美xingq一区二区| 欧美xxx.com| 久久激情视频免费观看| a'aaa级片在线观看| 国产成人久久久| 精品国产伦一区二区三区观看说明| 动漫精品视频| 欧美日韩在线网站| 国产青草视频在线观看| 久久久精品午夜少妇| 在线观看av免费观看| 播五月开心婷婷综合| 欧日韩不卡视频| 疯狂欧美牲乱大交777| 怡春院在线视频| 精品国产91亚洲一区二区三区婷婷| 九九在线视频| 欧美日韩国产二区| 欧美男体视频| 444亚洲人体| 国产成人影院| 日韩精品一区二区三区四| 老牛国产精品一区的观看方式| 日韩欧美中文视频| 久久精品视频在线看| 久草视频精品在线| 欧美日韩久久久久久| 午夜小视频在线播放| 麻豆国产精品va在线观看不卡| 女厕盗摄一区二区三区| 99国产超薄丝袜足j在线观看| 激情综合网站| 蜜桃传媒一区二区三区| 国内精品久久久久影院一蜜桃| 男人天堂av电影| 香港成人在线视频| 99免费在线视频| 中文字幕成人精品久久不卡| 理论不卡电影大全神| 99高清视频有精品视频| 国产精品久久久久久麻豆一区软件| 国产91在线免费| 成人sese在线| 99热精品免费| 5566中文字幕一区二区电影| 川上优的av在线一区二区| 91a在线视频| 成人激情自拍| 日本男女交配视频| 国产精品一区二区久久精品爱涩 | 欧美啪啪一区| 日本77777| 国产精品私人自拍| 午夜一区二区三区四区| 亚洲精品有码在线| 周于希免费高清在线观看| 国产日韩欧美二区| 亚洲午夜精品久久久久久app| 91人妻一区二区三区| 综合久久久久综合| 国产精品久久久久久久免费看| 中文字幕欧美国内| 日本一道高清亚洲日美韩| 色播五月综合| 免费久久精品视频| 国产又粗又黄又猛| 欧美色图免费看| 91电影在线播放| 国产美女直播视频一区| 水蜜桃精品av一区二区| 中文字幕网av| 亚洲色图丝袜美腿| 午夜久久久久久久久久| 久久久久久久97| 噜噜噜狠狠夜夜躁精品仙踪林| 无码人妻少妇伦在线电影| 成人黄色av电影| 好吊操这里只有精品| 精品视频在线观看日韩| 欧美性xxx| 翔田千里亚洲一二三区| 精品亚洲欧美一区| 天天干中文字幕| 亚洲大胆美女视频| 中文字幕在线看片| 视频一区二区三| 国产一区高清在线| 精品97人妻无码中文永久在线| 亚洲国产成人精品女人久久久| 日韩欧美精品一区二区三区| 日韩久久在线| 久久国产视频网| 久草视频免费播放| 精品偷拍各种wc美女嘘嘘| 先锋欧美三级| 国产精品无码乱伦| www.亚洲激情.com| 真实新婚偷拍xxxxx| 久久91亚洲精品中文字幕| 欧美激情99| 国产视频1区2区3区| 一区二区欧美精品| 可以在线观看的av| 成人久久精品视频| 在线亚洲欧美| 欧美视频一区二区在线| 精品福利二区三区| 成人看片网页| 亚洲色成人www永久在线观看| 91视视频在线观看入口直接观看www| 一级特黄免费视频| 欧美极品第一页| 欧美少妇性xxxx| 国产调教打屁股xxxx网站| 色偷偷久久一区二区三区| 国产三级在线播放| 麻豆精品蜜桃一区二区三区| 精品午夜一区二区三区在线观看| 日本一本高清视频| 日韩中文在线不卡| 亚州av一区| 超碰人人cao| 欧美丝袜自拍制服另类| 绿色成人影院| 国产免费xxx| 国产视频一区二区在线观看| xxxx国产精品| 国产欧美日韩丝袜精品一区| 国产欧美日韩一级| 全网免费在线播放视频入口| 宅男66日本亚洲欧美视频| 加勒比色综合久久久久久久久 |