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

阿里P6+面試:介紹下觀察者模式?

開發 前端
在設計模式中也有一種模式能有效的達到解偶、異步的特點,那就是觀察者模式又稱為發布訂閱模式。今天阿丙就分享一下實際開發中比較常見的這種模式。

[[403490]]

消息隊列(MQ),一種能實現生產者到消費者單向通信的通信模型,這也是現在常用的主流中間件。

常見有 RabbitMQ、ActiveMQ、Kafka等 他們的特點也有很多 比如 解偶、異步、廣播、削峰 等等多種優勢特點。

在設計模式中也有一種模式能有效的達到解偶、異步的特點,那就是觀察者模式又稱為發布訂閱模式。

今天阿丙就分享一下實際開發中比較常見的這種模式

大綱

定義

什么是觀察者模式?他的目的是什么?

  • 當一個對象的狀態發生改變時,已經登記的其他對象能夠觀察到這一改變從而作出自己相對應的改變。通過這種方式來達到減少依賴關系,解耦合的作用。

舉一個例子,就好比微信朋友圈,以當前個人作為訂閱者,好友作為主題。一個人發一條動態朋友圈出去,他的好友都能看到這個朋友圈,并且可以在自主選擇點贊或者評論。

感覺有點抽象,還是看看他有哪些主要角色:

  • Subject(主題): 主要由類實現的可觀察的接口,通知觀察者使用attach方法,以及取消觀察的detach方法。
  • ConcreteSubject(具體主題): 是一個實現主題接口的類,處理觀察者的變化
  • Observe(觀察者): 觀察者是一個由對象水岸的接口,根據主題中的更改而進行更新。

這么看角色也不多,但是感覺還是有點抽象,我們還是用具體實例代碼來走一遍吧,我們還是以上面的朋友圈為例看看代碼實現

  1. public interface Subject { 
  2.     // 添加訂閱關系 
  3.     void attach(Observer observer); 
  4.     // 移除訂閱關系 
  5.     void detach(Observer observer); 
  6.     // 通知訂閱者 
  7.     void notifyObservers(String message); 

先創建一個主題定義,定義添加刪除關系以及通知訂閱者

  1. public class ConcreteSubject implements Subject { 
  2.  
  3.     // 訂閱者容器 
  4.     private List<Observer> observers = new ArrayList<Observer>(); 
  5.  
  6.     @Override 
  7.     public void attach(Observer observer) { 
  8.         // 添加訂閱關系 
  9.         observers.add(observer); 
  10.     } 
  11.  
  12.     @Override 
  13.     public void detach(Observer observer) { 
  14.         // 移除訂閱關系 
  15.         observers.remove(observer); 
  16.     } 
  17.  
  18.     @Override 
  19.     public void notifyObservers(String message) { 
  20.         // 通知訂閱者們 
  21.         for (Observer observer : observers) { 
  22.             observer.update(message); 
  23.         } 
  24.     } 

其次再創建的具體主題,并且構建一個容器來維護訂閱關系,支持添加刪除關系,以及通知訂閱者

  1. public interface Observer { 
  2.     // 處理業務邏輯 
  3.     void update(String message); 

創建一個觀察者接口,方便我們管理

  1. public class FriendOneObserver implements Observer { 
  2.     
  3.   @Override 
  4.     public void update(String message) { 
  5.         // 模擬處理業務邏輯 
  6.         System.out.println("FriendOne 知道了你發動態了" + message); 
  7.     } 

最后就是創建具體的觀察者類,實現觀察者接口的update方法,處理本身的業務邏輯

  1. public class test { 
  2.      
  3.     public static void main(String[] args) { 
  4.  
  5.         ConcreteSubject subject = new ConcreteSubject(); 
  6.         // 這里假設是添加好友 
  7.         subject.attach(new FriendOneObserver()); 
  8.         FriendTwoObserver twoObserver = new FriendTwoObserver(); 
  9.         subject.attach(twoObserver); 
  10.  
  11.         // 發送朋友圈動態 
  12.         subject.notifyObservers("第一個朋友圈消息"); 
  13.         // 輸出結果:FriendOne 知道了你發動態了第一個朋友圈消息 
  14.         //          FriendTwo 知道了你發動態了第一個朋友圈消息 
  15.  
  16.         // 這里發現 twoObserver 是個推薦賣茶葉的,刪除好友 
  17.         subject.detach(twoObserver); 
  18.         subject.notifyObservers("第二個朋友圈消息"); 
  19.         // 輸出結果:FriendOne 知道了你發動態了第二個朋友圈消息 
  20.     } 

最后就是看測試結果了,通過ConcreteSubject 維護了一個訂閱關系,在通過notifyObservers 方法通知訂閱者之后,觀察者都獲取到消息從而處理自己的業務邏輯。

這里細心的朋友已經達到了解耦合的效果,同時也減少了依賴關系,每個觀察者根本不要知道發布者處理了什么業務邏輯,也不用依賴發布者任何業務模型,只關心自己本身需要處理的邏輯就可以了。

如果有新的業務添加進來,我們也只需要創建一個新的訂閱者,并且維護到observers 容器中即可,也符合我們的開閉原則。

這里只是一種同步的實現方式,我們還可以擴展更多其他的異步實現方式,或者采用多線程等實現方式。

框架應用

觀察者模式在框架的中的應用也是應該很多

  • 第一種 熟悉JDK的人應該知道 在java.util 包下 除了常用的 集合 和map之外還有一個Observable類,他的實現方式其實就是觀察者模式。里面也有添加、刪除、通知等方法。

這里需要注意是的 他是用Vector 作為訂閱關系的容器,同時在他的定義方法中都添加synchronized關鍵字修飾類,以達到線程安全的目的

這里我貼出了關鍵源碼,感興趣的同學可以自己打開并且觀看每個方法的注釋。

  • 第二種 在Spring中有一個ApplicationListener,也是采用觀察者模式來處理的,ApplicationEventMulticaster作為主題,里面有添加,刪除,通知等。

spring有一些內置的事件,當完成某種操作時會發出某些事件動作,他的處理方式也就上面的這種模式,當然這里面還有很多,我沒有細講,有興趣的同學可以仔細了解下Spring的啟動過程。

import java.util.EventListener;/** * Interface to be implemented by application event listeners. * Based on the standard {@code java.util.EventListener} interface * for the Observer design pattern. // 這里也已經說明是采用觀察者模式 * *

  1. import java.util.EventListener; 
  2.  
  3. /** 
  4.  * Interface to be implemented by application event listeners. 
  5.  * Based on the standard {@code java.util.EventListener} interface 
  6.  *  for the Observer design pattern. // 這里也已經說明是采用觀察者模式 
  7.  * 
  8.  * <p>As of Spring 3.0, an ApplicationListener can generically declare the event type 
  9.  * that it is interested inWhen registered with a Spring ApplicationContext, events 
  10.  * will be filtered accordingly, with the listener getting invoked for matching event 
  11.  * objects only
  12.  * 
  13.  * @author Rod Johnson 
  14.  * @author Juergen Hoeller 
  15.  * @param <E> the specific ApplicationEvent subclass to listen to 
  16.  * @see org.springframework.context.event.ApplicationEventMulticaster //主題 
  17.  */ 
  18. @FunctionalInterface 
  19. public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { 
  20.  
  21.  /** 
  22.   * Handle an application event. 
  23.   * @param event the event to respond to 
  24.   */ 
  25.  void onApplicationEvent(E event); 
  26.  
  • 第三種 Google Guava的事件處理機制Guava EventBus 他的實現也是采用設計模式中的觀察者設計模式。

EventBus 當前實現有兩種方式:

  • EventBus // 同步阻塞模式
  • AsyncEventBus // // 異步非阻塞模式

EventBus內部也提供來一系列的方法來供我們方便使用:

  • register 方法作為添加觀察者
  • unregister方法刪除觀察者
  • post 方法發送通知消息等

使用起來非常方便。添加@Subscribe注解就可以創建一個訂閱者了,具體的使用方式可以看看官網。

現實業務改造舉例

框架應用的例子這么多,在業務場景中其實也有很多地方可以使用到,這里我還是給大家舉一個例子。

在新用戶注冊成功之后我們需要給用戶做兩件事情,第一是發送注冊成功短信,第二是給用發送新人優惠券。

看到這個問題 大家可能首先會想到用MQ消息處理呀,是的,用消息確實可以的,但是這里我們用觀察者模式來實現這個問題,同時可以給大家演示一下,同步或者異步的問題。

  1. public class SendNewPersonCouponObserver implements Observer { 
  2.  
  3.     ExecutorService pool = Executors.newFixedThreadPool(2); 
  4.  
  5.     @Override 
  6.     public void update(String message) { 
  7.  
  8.         Future<String> future = pool.submit(new Callable<String>() { 
  9.             @Override 
  10.             public String call() throws Exception { 
  11.                 TimeUnit.SECONDS.sleep(3); 
  12.                 // 處理響應的業務邏輯 
  13.                 return "調用發券服務,返回結果"
  14.             } 
  15.         }); 
  16.         try { 
  17.             // 假設等待200毫秒 沒有獲取到返回值結果則認為失敗 
  18.             System.out.println(future.get(4000, TimeUnit.MILLISECONDS)); 
  19.         } catch (Exception e) { 
  20.             // 執行異步獲取失敗 
  21.             // 記錄日志,定時任務重試等 
  22.         } 
  23.  
  24.         // 第一種不關心返回值結果 
  25.         Thread thread = new Thread(new Runnable() { 
  26.             @SneakyThrows 
  27.             @Override 
  28.             public void run() { 
  29.                 // 模擬服務調用 線程睡3秒鐘 
  30.                 TimeUnit.SECONDS.sleep(3); 
  31.                 System.out.println("發送新人優惠券"); 
  32.             } 
  33.         }); 
  34.         thread.start(); 
  35.         System.out.println("執行異步返回"); 
  36.     } 

  1. public class SendSuccessMessageObserver implements Observer { 
  2.  
  3.     @Override 
  4.     public void update(String message) { 
  5.         // 處理業務邏輯 
  6.         System.out.println("注冊成功"); 
  7.     } 
  8.  
  9.     public static void main(String[] args) { 
  10.         // 假設用戶注冊成功直接通知觀察者,改干自己的事情了 
  11.         ConcreteSubject subject = buildSubject(); 
  12.         subject.notifyObservers(""); 
  13.     } 
  14.   
  15.    private static ConcreteSubject buildSubject() { 
  16.         ConcreteSubject subject = new ConcreteSubject(); 
  17.         subject.attach(new SendSuccessMessageObserver()); 
  18.         subject.attach(new SendNewPersonCouponObserver()); 
  19.         return subject; 
  20.     } 

 

這里我們新寫了兩個觀察者,主要看第一個SendNewPersonCouponObserver,這里了異步開啟新的線程去處理我們的業務邏輯,當我們關心返回值的時候可以用Future來獲取返回結果,當不關心的返回值的化,直接開啟普通線程就可以了。

這個舉例整體其實還是比較簡單的主要是為了說清楚異步線程處理,當然如果用Guava EventBus也可以實現。而且也不復雜,感興趣的朋友可以自己去試試。

當前現在有更加好的中間件MQ消息隊列來處理這個業務問題,使得我們更加從容的面對這類場景問題,但是一些資源不足,不想引入新的系統。還是可以用這種方式來處理問題的。

設計模式學習的不是代碼,而是學習每種模式的思想,他們分別處理的是什么業務場景。

總結

大家看完本篇文章不知道有發現沒有,其實整個內容都是圍繞了解耦的思想來寫的,觀察者模式作為行為型設計模式,主要也是為了不同的業務行為的代碼解耦。

合理的使用設計模式可以使代碼結構更加清晰,同時還能滿足不同的小模塊符合單一職責,以及開閉原則,從而達到前面寫工廠模式說的,提高代碼的可擴展性,維護成本低的特點。

我是敖丙你知道的越多,你不知道的越多,我們下期見。

 

責任編輯:姜華 來源: 三太子敖丙
相關推薦

2020-10-26 08:45:39

觀察者模式

2021-07-08 11:28:43

觀察者模式設計

2013-11-26 17:09:57

Android設計模式

2021-09-06 10:04:47

觀察者模式應用

2022-01-29 22:12:35

前端模式觀察者

2011-04-29 09:22:22

2012-08-27 10:52:20

.NET架構觀察者模式

2021-03-29 07:14:28

Spring觀察者模式

2024-12-03 09:34:35

觀察者模 式編程Javav

2015-11-25 11:10:45

Javascript設計觀察

2024-02-18 12:36:09

2024-06-04 13:11:52

Python行為設計模式開發

2009-03-30 09:39:04

觀察者思想換位設計模式

2021-11-08 11:32:01

觀察

2021-09-29 19:45:24

觀察者模式Observable

2021-01-25 05:38:04

設計原理VueSubject

2022-07-13 08:36:57

MQ架構設計模式

2022-05-09 10:50:13

觀察者模式設計模式

2020-12-09 05:18:17

面試觀察者訂閱模式

2021-04-14 14:40:37

forSpringJava
點贊
收藏

51CTO技術棧公眾號

日本一区二区久久精品| 91国内在线视频| 涩涩网站在线看| 在线āv视频| 26uuu色噜噜精品一区二区| 国产成人免费91av在线| 日本老熟俱乐部h0930| 麻豆精品99| 欧美日韩激情在线| 99在线精品免费视频| 99se视频在线观看| 成人自拍视频在线观看| 国产精品一区二区久久久| 久久久久久久9999| 日韩欧美自拍| 精品在线小视频| 韩国一区二区在线播放| 日本欧美日韩| 亚洲国产日韩a在线播放| 日韩av不卡在线播放| 亚洲av综合色区无码一二三区| 久久成人亚洲| 久久久久免费精品国产| 亚洲精品国产精品国自| 麻豆精品av| 日韩亚洲欧美一区| 亚洲国产高清av| 少妇淫片在线影院| 夜夜亚洲天天久久| 黄瓜视频免费观看在线观看www| 日韩av高清在线| 风间由美一区二区三区在线观看| 国产精品女人久久久久久| 日本天堂在线视频| 欧美激情第8页| 久久精品一偷一偷国产| 俄罗斯毛片基地| 精品中文一区| 欧美精品一区二区三区视频| www.亚洲自拍| 香蕉久久一区| 欧美日韩一本到| 超碰在线公开97| 欧洲成人一区| 欧美影院一区二区| 亚洲成熟丰满熟妇高潮xxxxx| 91超碰在线| 亚洲第一成年网| 日韩精品在线观看av| 国产秀色在线www免费观看| 中文成人综合网| 日韩理论片在线观看| 理论视频在线| 久久精品欧美日韩| 日本精品免费| 久久伊伊香蕉| 国产欧美精品一区二区色综合朱莉 | 国产精品一卡| 欧美在线视频网| 7799精品视频天天看| 国产精品毛片一区二区三区| 91成人在线播放| 精品免费囯产一区二区三区 | 国产精品蜜臀在线观看| 亚洲国产成人不卡| 秋霞影院午夜丰满少妇在线视频| 国产精品国产自产拍在线| 日韩视频专区| 色综合久久影院| 亚洲视频在线一区二区| 特大黑人娇小亚洲女mp4| 人交獸av完整版在线观看| 洋洋av久久久久久久一区| 99在线精品免费视频| 手机在线观看av网站| 色哟哟一区二区| 天天爽夜夜爽一区二区三区| 粉嫩一区二区三区在线观看| 日韩视频一区二区| 亚洲 欧美 日韩在线| 色婷婷av一区二区三区丝袜美腿| 一区二区三区国产在线观看| 国产在线观看免费视频软件| 黑丝一区二区三区| 欧美最猛黑人xxxx黑人猛叫黄 | 欧美成人一区二区| 国产精品久久久久久亚洲av| 午夜a一级毛片亚洲欧洲| 在线精品视频视频中文字幕| 欧美三级黄色大片| 亚洲美女黄色| 国产精品嫩草影院一区二区| 亚洲av无码国产精品久久不卡 | 日韩免费福利电影在线观看| 中文字幕在线播放一区| 青青草国产免费一区二区下载 | 345成人影院| 欧美日韩视频在线第一区 | 亚洲天堂自拍偷拍| 丰满白嫩尤物一区二区| 欧美美乳视频网站在线观看| 污污影院在线观看| 欧美亚洲综合在线| 亚洲AV成人精品| 女人av一区| 欧美富婆性猛交| 亚洲av无码不卡| 成人网在线免费视频| 日韩区国产区| 9999精品成人免费毛片在线看| 精品久久久久久久大神国产| 久久人人爽av| 国产日韩视频在线| 欧美国产日韩在线| 一区二区日韩视频| 久久久久久黄色| 成人免费看片'免费看| 成人国产精品一区二区免费麻豆 | 91精品国产自产在线| 天堂资源最新在线| 亚洲综合精品自拍| 国产三级国产精品国产专区50| 欧美人成在线观看ccc36| 久久久97精品| 中文字幕在线日亚洲9| 97国产精品videossex| 欧美一级特黄aaaaaa在线看片| 成人看片网页| 亚洲欧美日韩在线一区| 国产精品6666| 高潮精品一区videoshd| 成人性做爰片免费视频| 成人黄色免费观看| 亚洲国产欧美在线成人app| 国产高清在线免费观看| 久久国产精品色婷婷| 日韩精品欧美一区二区三区| 蜜桃av在线播放| 亚洲福利视频久久| 福利一区二区三区四区| 床上的激情91.| 永久免费看av| 麻豆久久一区| 欧美成人免费视频| 精品美女www爽爽爽视频| 成人欧美一区二区三区小说| 999精品视频在线| 欧美日韩中字| 国产精品精品一区二区三区午夜版| 天堂资源中文在线| 欧美性xxxxxxxxx| 在线免费播放av| 国产精品综合| 美脚丝袜一区二区三区在线观看| 999福利在线视频| 日韩高清中文字幕| 国产午夜性春猛交ⅹxxx| 91麻豆国产在线观看| 国产中文字幕在线免费观看| 日韩人体视频| 日韩美女视频免费在线观看| 大地资源中文在线观看免费版| 色噜噜狠狠成人中文综合| 一区二区黄色片| 日韩av电影免费观看高清完整版| 亚洲午夜在线观看| 亚洲二区av| 欧美黄色免费网站| 天堂在线观看视频| 色哟哟亚洲精品| 精品一区二区6| 国产在线视视频有精品| 欧洲精品在线播放| 欧美成人午夜77777| 日本免费一区二区三区视频观看| 超碰免费在线| 欧美一区二区美女| 日本免费一二三区| 国产视频亚洲色图| 国产三级生活片| 激情综合在线| 日本精品一区二区三区高清 久久| 播放一区二区| 久久99亚洲热视| 欧美女v视频| 4438x成人网最大色成网站| 麻豆一区二区三区精品视频| 久久免费视频一区| 亚洲欧美日本一区二区| 亚洲伦理精品| 伊人久久青草| 欧美日韩另类图片| 91精品久久久久久| 超免费在线视频| 色婷婷综合久久久久| 成人久久久精品国产乱码一区二区 | 久久亚洲精品成人| 手机在线观看毛片| 欧美日韩视频专区在线播放| 五月天婷婷网站| 国产精品久久久久三级| 少妇精品无码一区二区三区| 蜜臀av在线播放一区二区三区| 国产在线xxxx| 成人情趣视频网站| 国产精选在线观看91| 国产精品第一国产精品| 久久久之久亚州精品露出| 91在线导航| 日韩av在线网站| 精品人妻一区二区三区蜜桃| 欧美亚洲自拍偷拍| 国产精品99精品无码视| 中文字幕一区二区不卡| av在线网站观看| 成人免费视频视频在线观看免费| 高清一区在线观看| 久久久精品五月天| 亚洲国产精品无码观看久久| 99精品在线免费在线观看| 欧美一级二级三级| 欧美aaaaaaaa牛牛影院| 91九色偷拍| 小说区图片区亚洲| 国产精品美腿一区在线看| 色戒汤唯在线| 久久久久久久久久久免费| 黄色免费在线观看网站| 最近2019中文免费高清视频观看www99 | 91丝袜高跟美女视频| 在线观看欧美一区二区| 久久精品国产精品亚洲精品| 男人天堂成人在线| 性色av一区二区怡红| 色欲色香天天天综合网www| 国产综合色产| 91免费版看片| 欧美国产三区| 少妇一晚三次一区二区三区| 羞羞色午夜精品一区二区三区| 亚洲国产日韩综合一区| 成人同人动漫免费观看| 色视频一区二区三区| 不卡一区2区| 日韩久久不卡| 日本黄色精品| 久久综合色一本| 精品一区在线| 日韩亚洲视频| 欧美国产一级| 在线视频精品一区| 一区二区三区四区日韩| 国产免费一区二区三区四在线播放| 欧美mv日韩| 中文字幕在线乱| 欧美阿v一级看视频| www.国产在线播放| 在线观看一区| 久久精品.com| 男人操女人的视频在线观看欧美| www.com操| 国产很黄免费观看久久| 人妻换人妻a片爽麻豆| 99久久精品免费精品国产| 久久国产精品影院| 欧美激情一区二区三区四区| 精品无码一区二区三区蜜臀| 亚洲激情网站免费观看| 99热国产在线观看| 在线观看av不卡| 国产美女主播在线观看| 精品国产免费久久| 青青操在线视频| 在线亚洲男人天堂| 国产午夜精品久久久久免费视| 欧美国产精品日韩| 在线观看涩涩| 国产精品午夜国产小视频| 免费观看性欧美大片无片| 国产区日韩欧美| 精品久久网站| 男人j进女人j| 久久aⅴ国产紧身牛仔裤| www.久久久精品| 成人av在线资源| 亚洲精品国产91| 亚洲乱码中文字幕综合| 国产一级做a爱片久久毛片a| 欧美亚洲综合另类| 亚洲欧美另类一区| 国产亚洲精品美女久久久| 99在线视频观看| 国产成人精品午夜| 欧美经典一区| 日韩黄色影视| 伊人成人网在线看| 污片在线免费看| 99re热这里只有精品视频| youjizz亚洲女人| 亚洲国产日韩在线一区模特| 中文字幕一二三四| 亚洲精品国产综合区久久久久久久| 77导航福利在线| 91精品国产色综合| 国产成年精品| 日韩精品一区二区三区色偷偷 | 亚洲视频免费观看| 亚洲婷婷综合网| 精品美女被调教视频大全网站| 触手亚洲一区二区三区| 97超碰国产精品女人人人爽| 高清久久一区| 亚洲精品高清国产一线久久| 日韩视频精品在线观看| 永久看看免费大片| 中文欧美字幕免费| 欧美一区二区三区网站| 337p日本欧洲亚洲大胆色噜噜| 黄色av电影在线播放| 国产精品你懂得| 沈樵精品国产成av片| 久久视频这里有精品| 国产精品伊人色| 国产午夜精品久久久久久久久| 欧美日韩国产在线看| 精品人妻一区二区三区换脸明星 | 免费网站观看www在线观| 欧美日韩国产首页| 九九热视频在线观看| 欧美亚洲免费电影| 日本在线中文字幕一区| 日本老太婆做爰视频| 国内精品伊人久久久久av影院| 一二三四国产精品| 一本色道久久综合精品竹菊| 五月天婷婷在线播放| 国色天香2019中文字幕在线观看| 国产精品成人**免费视频| 亚洲一区二区三区精品动漫| 日韩黄色片在线观看| 黑人巨大精品欧美| 欧美午夜xxx| 午夜18视频在线观看| 68精品国产免费久久久久久婷婷| 国内精品偷拍| 黄色www网站| 99久久精品国产一区二区三区| xxxxxx国产| 亚洲国产又黄又爽女人高潮的| av在线加勒比| 久久偷看各类wc女厕嘘嘘偷窃 | 亚洲精品一二三区| 国产特级aaaaaa大片| 色综合男人天堂| gogo久久日韩裸体艺术| 丰满少妇大力进入| aaa国产一区| 69xxxx国产| 亚洲最新在线视频| 日本午夜免费一区二区| 咪咪色在线视频| 成人做爰69片免费看网站| 国产精品变态另类虐交| 日韩成人久久久| 精品视频在线一区二区在线| 亚洲一区二区三区精品动漫| 国产一区二区久久| 久久免费小视频| 日韩精品免费综合视频在线播放 | 欧美性大战久久| 久久久久久国产精品免费无遮挡| 亚洲xxx视频| 国产日韩视频| 日本美女黄色一级片| 日韩一区二区电影网| av成人影院在线| 天堂资源在线亚洲视频| 国产乱码精品1区2区3区| 久久夜靖品2区| 中文字幕免费精品一区高清| 精品久久久久久久久久岛国gif| 久久久久久久久久网| 欧美韩国日本不卡| 亚洲av无码乱码国产精品久久| 国产91精品久久久| 四虎国产精品免费观看| 无码人妻一区二区三区在线| 91国内精品野花午夜精品| 黄色成年人视频在线观看| 久久久久网址| 激情综合网av| 免费观看成人毛片| 美女啪啪无遮挡免费久久网站| 欧美日韩一区二区三区四区不卡 | 99精品免费观看| 欧美亚洲国产视频小说| 91精品国产乱码久久久久久久| 欧美大片免费播放器| 欧美顶级少妇做爰| 中文字幕乱码中文乱码51精品|