亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++設(shè)計模式編程中使用Bridge橋接模式的完全攻略

2020-05-23 14:07:25
字體:
供稿:網(wǎng)友
這篇文章主要介紹了C++設(shè)計模式編程中使用Bridge橋接模式的完全攻略,Bridge將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化需要的朋友可以參考下
 

橋接模式將抽象(Abstraction)與實現(xiàn)(Implementation)分離,使得二者可以獨立地變化。

橋接模式典型的結(jié)構(gòu)圖為:

C++,設(shè)計模式編程,Bridge,橋接模式

在橋接模式的結(jié)構(gòu)圖中可以看到,系統(tǒng)被分為兩個相對獨立的部分,左邊是抽象部分,右邊是實現(xiàn)部分,這兩個部分可以互相獨立地進(jìn)行修改:例如上面問題中的客戶需求變化,當(dāng)用戶需求需要從 Abstraction 派生一個具體子類時候,并不需要像上面通過繼承方式實現(xiàn)時候需要添加子類 A1 和 A2 了。另外當(dāng)上面問題中由于算法添加也只用改變右邊實現(xiàn)(添加一個具體化子類),而右邊不用在變化,也不用添加具體子類了。

一切都變得 elegant!

橋接模式號稱設(shè)計模式中最難理解的模式之一,關(guān)鍵就是這個抽象和實現(xiàn)的分離非常讓人奇怪,大部分人剛看到這個定義的時候都會認(rèn)為實現(xiàn)就是繼承自抽象,那怎么可能將他們分離呢。

《大話設(shè)計模式》中就Bridge模式的解釋:

手機品牌和軟件是兩個概念,不同的軟件可以在不同的手機上,不同的手機可以有相同的軟件,兩者都具有很大的變動性。如果我們單獨以手機品牌或手機軟件為基類來進(jìn)行繼承擴(kuò)展的話,無疑會使類的數(shù)目劇增并且耦合性很高,(如果更改品牌或增加軟件都會增加很多的變動)兩種方式的結(jié)構(gòu)如下:

C++,設(shè)計模式編程,Bridge,橋接模式

C++,設(shè)計模式編程,Bridge,橋接模式

所以將兩者抽象出來兩個基類分別是PhoneBrand和PhoneSoft,那么在品牌類中聚合一個軟件對象的基類將解決軟件和手機擴(kuò)展混亂的問題,這樣兩者的擴(kuò)展就相對靈活,剪短了兩者的必要聯(lián)系,結(jié)構(gòu)圖如下:

C++,設(shè)計模式編程,Bridge,橋接模式

這樣擴(kuò)展品牌和軟件就相對靈活獨立,達(dá)到解耦的目的!

抽象基類及接口:

1、Abstraction::Operation():定義要實現(xiàn)的操作接口

2、AbstractionImplement::Operation():實現(xiàn)抽象類Abstaction所定義操作的接口,由其具體派生類ConcreteImplemenA、ConcreteImplemenA或者其他派生類實現(xiàn)。

3、在Abstraction::Operation()中根據(jù)不同的指針多態(tài)調(diào)用AbstractionImplement::Operation()函數(shù)。

理解:
Bridge用于將表示和實現(xiàn)解耦,兩者可以獨立的變化.在Abstraction類中維護(hù)一個AbstractionImplement類指針,需要采用不同的實現(xiàn)方式的時候只需要傳入不同的AbstractionImplement派生類就可以了.

Bridge的實現(xiàn)方式其實和Builde十分的相近,可以這么說:本質(zhì)上是一樣的,只是封裝的東西不一樣罷了.兩者的實現(xiàn)都有如下的共同點:

抽象出來一個基類,這個基類里面定義了共有的一些行為,形成接口函數(shù)(對接口編程而不是對實現(xiàn)編程),這個接口函數(shù)在Buildier中是BuildePart函數(shù)在Bridge中是Operation函數(shù);

其次,聚合一個基類的指針,如Builder模式中Director類聚合了一個Builder基類的指針,而Brige模式中Abstraction類聚合了一個AbstractionImplement基類的指針(優(yōu)先采用聚合而不是繼承);

而在使用的時候,都把對這個類的使用封裝在一個函數(shù)中,在Bridge中是封裝在Director::Construct函數(shù)中,因為裝配不同部分的過程是一致的,而在Bridge模式中則是封裝在Abstraction::Operation函數(shù)中,在這個函數(shù)中調(diào)用對應(yīng)的AbstractionImplement::Operation函數(shù).就兩個模式而言,Builder封裝了不同的生成組成部分的方式,而Bridge封裝了不同的實現(xiàn)方式.

橋接模式就將實現(xiàn)與抽象分離開來,使得RefinedAbstraction依賴于抽象的實現(xiàn),這樣實現(xiàn)了依賴倒轉(zhuǎn)原則,而不管左邊的抽象如何變化,只要實現(xiàn)方法不變,右邊的具體實現(xiàn)就不需要修改,而右邊的具體實現(xiàn)方法發(fā)生變化,只要接口不變,左邊的抽象也不需要修改。


優(yōu)點
1.將實現(xiàn)抽離出來,再實現(xiàn)抽象,使得對象的具體實現(xiàn)依賴于抽象,滿足了依賴倒轉(zhuǎn)原則。

2.將可以共享的變化部分,抽離出來,減少了代碼的重復(fù)信息。

3.對象的具體實現(xiàn)可以更加靈活,可以滿足多個因素變化的要求。

缺點
客戶必須知道選擇哪一種類型的實現(xiàn)。
設(shè)計中有超過一維的變化我們就可以用橋模式。如果只有一維在變化,那么我們用繼承就可以圓滿的解決問題。

代碼示例:

Abstraction.h

#ifndef _ABSTRACTION_H_#define _ABSTRACTION_H_class AbstractionImplement;class Abstraction{public:  virtual void Operation()=0;//定義接口,表示該類所支持的操作  virtual ~Abstraction();protected:  Abstraction();};class RefinedAbstractionA:public Abstraction{public:  RefinedAbstractionA(AbstractionImplement* imp);//構(gòu)造函數(shù)  virtual void Operation();//實現(xiàn)接口  virtual ~RefinedAbstractionA();//析構(gòu)函數(shù)private:  AbstractionImplement* _imp;//私有成員};class RefinedAbstractionB:public Abstraction{public:  RefinedAbstractionB(AbstractionImplement* imp);//構(gòu)造函數(shù)  virtual void Operation();//實現(xiàn)接口  virtual ~RefinedAbstractionB();//析構(gòu)函數(shù)private:  AbstractionImplement* _imp;//私有成員};#endifAbstraction.cpp#include "Abstraction.h"#include "AbstractionImplement.h"#include <iostream>using namespace std;Abstraction::Abstraction(){}Abstraction::~Abstraction(){}RefinedAbstractionA::RefinedAbstractionA(AbstractionImplement* imp){  this->_imp = imp;}RefinedAbstractionA::~RefinedAbstractionA(){  delete this->_imp;  this->_imp = NULL;}void RefinedAbstractionA::Operation(){  cout << "RefinedAbstractionA::Operation" << endl;  this->_imp->Operation();}RefinedAbstractionB::RefinedAbstractionB(AbstractionImplement* imp){  this->_imp = imp;}RefinedAbstractionB::~RefinedAbstractionB(){  delete this->_imp;  this->_imp = NULL;}void RefinedAbstractionB::Operation(){  cout << "RefinedAbstractionB::Operation" << endl;  this->_imp->Operation();}AbstractImplement.h#ifndef _ABSTRACTIONIMPLEMENT_H_#define _ABSTRACTIONIMPLEMENT_H_//抽象基類,定義了實現(xiàn)的接口class AbstractionImplement{public:  virtual void Operation()=0;//定義操作接口  virtual ~AbstractionImplement();protected:  AbstractionImplement();};// 繼承自AbstractionImplement,是AbstractionImplement的不同實現(xiàn)之一class ConcreteAbstractionImplementA:public AbstractionImplement{public:  ConcreteAbstractionImplementA();  void Operation();//實現(xiàn)操作  ~ConcreteAbstractionImplementA();protected:};// 繼承自AbstractionImplement,是AbstractionImplement的不同實現(xiàn)之一class ConcreteAbstractionImplementB:public AbstractionImplement{public:  ConcreteAbstractionImplementB();  void Operation();//實現(xiàn)操作  ~ConcreteAbstractionImplementB();protected:};#endifAbstractImplement.cpp#include "AbstractionImplement.h"#include <iostream>using namespace std;AbstractionImplement::AbstractionImplement(){}AbstractionImplement::~AbstractionImplement(){}ConcreteAbstractionImplementA::ConcreteAbstractionImplementA(){}ConcreteAbstractionImplementA::~ConcreteAbstractionImplementA(){}void ConcreteAbstractionImplementA::Operation(){  cout << "ConcreteAbstractionImplementA Operation" << endl;}ConcreteAbstractionImplementB::ConcreteAbstractionImplementB(){}ConcreteAbstractionImplementB::~ConcreteAbstractionImplementB(){}void ConcreteAbstractionImplementB::Operation(){  cout << "ConcreteAbstractionImplementB Operation" << endl;}

main.cpp

#include "Abstraction.h"#include "AbstractionImplement.h"#include <iostream>using namespace std;int main(){  /* 將抽象部分與它的實現(xiàn)部分分離,使得它們可以獨立地變化  1、抽象Abstraction與實現(xiàn)AbstractionImplement分離;  2、抽象部分Abstraction可以變化,如new RefinedAbstractionA(imp)、new RefinedAbstractionB(imp2);  3、實現(xiàn)部分AbstractionImplement也可以變化,如new ConcreteAbstractionImplementA()、new ConcreteAbstractionImplementB();  */  AbstractionImplement* imp = new ConcreteAbstractionImplementA();    //實現(xiàn)部分ConcreteAbstractionImplementA  Abstraction* abs = new RefinedAbstractionA(imp);            //抽象部分RefinedAbstractionA  abs->Operation();  cout << "-----------------------------------------" << endl;  AbstractionImplement* imp1 = new ConcreteAbstractionImplementB();    //實現(xiàn)部分ConcreteAbstractionImplementB  Abstraction* abs1 = new RefinedAbstractionA(imp1);            //抽象部分RefinedAbstractionA  abs1->Operation();  cout << "-----------------------------------------" << endl;  AbstractionImplement* imp2 = new ConcreteAbstractionImplementA();    //實現(xiàn)部分ConcreteAbstractionImplementA  Abstraction* abs2 = new RefinedAbstractionB(imp2);            //抽象部分RefinedAbstractionB  abs2->Operation();  cout << "-----------------------------------------" << endl;  AbstractionImplement* imp3 = new ConcreteAbstractionImplementB();    //實現(xiàn)部分ConcreteAbstractionImplementB  Abstraction* abs3 = new RefinedAbstractionB(imp3);            //抽象部分RefinedAbstractionB  abs3->Operation();  cout << endl;  return 0;}

代碼說明:
Bridge模式將抽象和實現(xiàn)分別獨立實現(xiàn),在代碼中就是Abstraction類和AbstractionImplement類。

使用組合(委托)的方式將抽象和實現(xiàn)徹底地解耦,這樣的好處是抽象和實現(xiàn)可以分別獨立地變化,系統(tǒng)的耦合性也得到了很好的降低。
GoF的那句話中的“實現(xiàn)”該怎么去理解:“實現(xiàn)”特別是和“抽象”放在一起的時候我們“默認(rèn)”的理解是“實現(xiàn)”就是“抽象”的具體子類的實現(xiàn),但是這里GoF所謂的“實現(xiàn)”的含義不是指抽象基類的具體子類對抽象基類中虛函數(shù)(接口)的實現(xiàn),是和繼承結(jié)合在一起的。而這里的“實現(xiàn)”的含義指的是怎么去實現(xiàn)用戶的需求,并且指的是通過組合(委托)的方式實現(xiàn)的,因此這里的實現(xiàn)不是指的繼承基類、實現(xiàn)基類接口,而是指的是通過對象組合實現(xiàn)用戶的需求。

實際上上面使用Bridge模式和使用帶來問題方式的解決方案的根本區(qū)別在于是通過繼承還是通過組合的方式去實現(xiàn)一個功能需求。

備注:

由于實現(xiàn)的方式有多種,橋接模式的核心就是把這些實現(xiàn)獨立出來,讓他們各自變化。

將抽象部分與它的實現(xiàn)部分分離:實現(xiàn)系統(tǒng)可能有多角度(維度)分類,每一種分類都可能變化,那么就把這種多角度分離出來讓它們獨立變化,減少它們之間的耦合。

在發(fā)現(xiàn)需要多角度去分類實現(xiàn)對象,而只用繼承會造成大量的類增加,不能滿足開放-封閉原則時,就要考慮用Bridge橋接模式了。

合成/聚合復(fù)用原則:盡量使用合成/聚合,精良不要使用類繼承。
優(yōu)先使用對象的合成/聚合將有助于保持每個類被封裝,并被集中在單個任務(wù)上。這樣類和類繼承層次會保持較小規(guī)模,并且不太可能增長為不可控制的龐然大物。

適用場景:

  • 你不希望在抽象和它的實現(xiàn)部分之間有一個固定的綁定關(guān)系。例如這種情況可能是因為,在程序運行時刻實現(xiàn)部分應(yīng)可以被選擇或者切換。
  • 類的抽象以及它的實現(xiàn)都應(yīng)該可以通過生成子類的方法加以擴(kuò)充。這時B r i d g e 模式使你可以對不同的抽象接口和實現(xiàn)部分進(jìn)行組合,并分別對它們進(jìn)行擴(kuò)充。
  • 對一個抽象的實現(xiàn)部分的修改應(yīng)對客戶不產(chǎn)生影響,即客戶的代碼不必重新編譯。
  • (C + +)你想對客戶完全隱藏抽象的實現(xiàn)部分。在C + +中,類的表示在類接口中是可見的。
  • 有許多類要生成。這樣一種類層次結(jié)構(gòu)說明你必須將一個對象分解成兩個部分。R u m b a u g h 稱這種類層次結(jié)構(gòu)為“嵌套的普化”(nested generalizations )。
  • 你想在多個對象間共享實現(xiàn)(可能使用引用計數(shù)),但同時要求客戶并不知道這一點。一個簡單的例子便是C o p l i e n 的S t r i n g 類[ C o p 9 2 ],在這個類中多個對象可以共享同一個字符串表示(S t r i n g R e p )。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
日本欧美一区| 欧美污在线观看| 久久久久国产精品麻豆ai换脸| 国产在线高清| 中文字幕一区二区久久人妻| 欧美日韩伦理一区二区| 亚洲av熟女高潮一区二区| 国产精品—色呦呦| 国产成人鲁色资源国产91色综| 香蕉av一区二区| 午夜精品福利一区二区蜜股av| 性欧美lx╳lx╳| 国产精品久久久久久在线观看| 久久黄色免费视频| 欧美激情在线观看视频免费| 麻豆一区一区三区四区| 欧美e片成人在线播放乱妇| 一区二区三区四区中文字幕| 91在线在线观看| 亚洲精品一级片| 国产伦精品一区二区三区四区免费| 久久国产精品久久精品| 亚洲自拍偷拍九九九| 成人在线观看www| 国产欧美日韩在线观看视频| 国产毛片在线看| 精品久久久久久亚洲国产300| 美女网站黄页| 高清美女视频一区| 黄网在线免费看| 激情不卡一区二区三区视频在线| 99精品美女视频在线观看热舞| 亚洲国产精品嫩草影院久久| 中文字幕欧美在线观看| 最新成人av在线| 日韩精品午夜视频| 国产系列在线观看| a级网站在线播放| 亚洲av无一区二区三区久久| jizzjizzjizz中国免费| 久久精品性爱视频| 日本三级网站在线观看| 一本本久综合久久爱| 97视频网站入口| 欧美日韩国产首页在线观看| 香港三级日本三级a视频| 成人在线免费网站| 欧美网站一区二区| 成人av色在线观看| 99re6热在线精品视频播放| 四虎永久免费影院| 97色在线观看免费视频| 超碰97在线人人| 日本精品一区二区在线观看| 国产综合香蕉五月婷在线| 91精品成人| 精品人妻伦一区二区三区久久| 亚洲码国产岛国毛片在线| 欧美黄色视屏| 蝌蚪91视频| 国产精品国产三级国产aⅴ中文| 先锋影音一区二区| 色综合天天综合网天天看片| 无码人妻久久一区二区三区蜜桃| 精品国产免费人成网站| 一级黄色片在线| 一区免费在线| 91超碰免费在线| 日本一区二区三区视频在线| 五月天婷婷丁香| 亚洲国内高清视频| 亚洲欧美激情小说另类| 久久激情五月婷婷| 日韩美女视频一区二区| 色呦呦免费观看| 亚洲 日韩 国产第一区| 丁香花电影在线观看完整版| 日韩极品精品视频免费观看| 国产很黄免费观看久久| 日本成人不卡| 91久久高清国语自产拍| 91在线公开视频| 一级特黄曰皮片视频| 精品少妇一区二区三区日产乱码| 中日精品一色哟哟| 亚洲欧美日韩精品久久亚洲区| 国产综合成人久久大片91| jizzjizz亚洲| 欧美在线观看成人| 日韩欧美国产三级电影视频| 日本韩国一区二区三区| 天堂中文在线免费观看| 涩涩网在线视频| 欧美一级片在线播放| 国产精品玖玖玖| 日韩精品一区在线| 一级视频在线免费观看| 毛片基地黄久久久久久天堂| 自拍偷拍精品视频| 色一情一乱一伦一区二区三区日本| 日韩美女视频在线| 国产精品1000| 狠狠爱综合网| 一区二区三区四区五区| 男女羞羞在线观看| 91超碰rencao97精品| 久久精品99久久香蕉国产色戒| ,一级淫片a看免费| 黄无遮挡免费网站| 在线视频一区二区免费| 国产精品一区在线观看| 精品国产免费久久久久久尖叫| 久久人人97超碰人人澡爱香蕉| 日本超碰在线观看| 日本大片免费看| 欧美成人另类视频| 亚洲欧美视频在线观看视频| 欧美激情国产日韩精品一区18| 一级黄色片毛片| 国产精品亚洲第五区在线| 成人免费黄色| 日韩精品诱惑一区?区三区| 一级欧美视频| 亚洲尤物在线视频观看| 激情综合五月婷婷| 久久夜色邦福利网| av动漫免费观看| www..com日韩| 国产91美女视频| www.亚洲色图| 在线观看国产日韩| 欧美日韩中文在线视频| 在线免费看毛片| 欧美一区91| 欧美黑人性受xxxx喷水| 免费国产黄线在线观看视频| 免费在线观看黄色小视频| 欧美另类激情| 美女网站色91| 色av中文字幕| 精品国产31久久久久久| 久久久久久色| 精品人妻无码一区二区三区| 精品国产麻豆免费人成网站| 国产伦一区二区三区色一情| 欧美videossex| 精品国产一区二区三区久久久蜜臀| 精品久久久国产精品999| 亚洲天堂免费在线观看视频| 999视频在线观看| 免费一区二区三区在在线视频| 爽好久久久欧美精品| 欧美成人aaa片一区国产精品| 国产精品香蕉在线观看| 亚洲欧美精品在线观看| 亚洲一级二级三级| 99c视频在线| 欧美日韩第一| 欧美激情一区二区三区成人| 久久精品五月| 国产欧美综合精品一区二区| 亚洲成人人体| 午夜精品福利一区二区三区av| 国产成人精品999| 人人做人人澡人人爽欧美| 成人免费福利视频| 玖玖爱免费视频| 91精品国产高清91久久久久久| 国产精品日韩在线一区| 99久久99久久精品免费看小说.| 在线观看操人| 国内自拍视频在线播放| 97热在线精品视频在线观看| 国产91一区| 婷婷电影在线观看| 国产精品视频二| 色94色欧美sute亚洲线路一久| 亚洲嫩草精品久久| av一本久道久久综合久久鬼色| 中文字幕在线字幕中文| 日韩电影免费在线观看| 欧美在线啊v一区| 黄色a级片在线观看| 成人在线网站| 久久99热这里只有精品| 男人操女人免费网站| 久久66热re国产毛片基地| 免费99精品国产自在在线| 国产一级特黄a高潮片| 好吊日精品视频| 欧美丰满片xxx777| 欧美日韩亚洲一区二区三区在线观看| 日韩在线免费看| 99久久99久久免费精品蜜臀| 亚洲最大成人| 国产在线不卡av| 无码人妻精品一区二区三区9厂| 成人精品在线视频观看| 中文字幕日韩精品有码视频| 国产精品探花在线播放| 91福利区在线观看| 97视频免费| 四虎av网址| 国产欧美一区二区三区在线看蜜臂| 亚洲男帅同性gay1069| 亚洲涩涩在线观看| 91精品婷婷国产综合久久竹菊| 美女激情福利视频在线观看| 亚洲在线天堂| 91综合视频| 成年午夜在线| 欧美一区免费视频| 亚洲三区在线| 成人av在线播放网址| 日韩欧美中文在线视频| 中国字幕a在线看韩国电影| 麻豆视频官网| 欧美日韩午夜影院| 97视频网站| 亚洲国产视频在线观看| 久久国产情侣| 老司机午夜福利视频| 久久中文字幕一区| 日韩精品视频在线免费观看| 国产精品成人3p一区二区三区| 亚洲欧美偷拍另类| www99热| 美女一区二区三区视频| 国产亚洲第一的欧洲日产| 最好看的日本字幕mv视频大全| 无码国产69精品久久久久网站| 日本亚洲欧美在线| 久久久久久久久久久久久久久久久久av| 成人在线免费观看| 91精品一区| 人妻互换一二三区激情视频| 日韩a**中文字幕| 一卡二卡三卡亚洲| 亚洲欧美国产va在线影院| 亚洲欧美激情在线观看| 999久久久国产999久久久| 国产麻豆高清视频在线第一页| 成人性生交大片免费看中文视频| 日本xxxx裸体xxxx| 日韩人妻一区二区三区蜜桃视频| 国产精品视频一区二区久久| 黑鬼狂亚洲人videos| 成人在线电影网站| 涩涩视频在线观看免费| 亚洲影院一区二区三区| 丁香久久五月| 韩国三级在线播放| 蜜桃传媒入口| 欧美丝袜丝交足nylons| 国产精品久久久久aaaa| 久久动漫亚洲| 岛国片在线观看| 成人女人免费毛片| 青青草社区视频| 一区二区三区久久网| 久久午夜无码鲁丝片| 欧美成人a交片免费看| av电影网站在线观看| 日韩在线免费av| 日本少妇精品亚洲第一区| 天天干天天色综合| 美女福利一区二区三区| 被弄出白浆喷水了视频| 国产69精品99久久久久久宅男| 国产精品乱码一区二区三区| 嗯啊主人调教在线播放视频| 蜜桃视频一日韩欧美专区| 久久精品国产免费观看99| 中文视频在线观看| 91视频国产资源| 国产成人夜间影院在线观看| 亚洲人的天堂男人爽爽爽| 国产激情无码一区二区三区| 欧美一级日本a级v片| 嫩草嫩草嫩草嫩草嫩草| 精品久久久久久久久国产字幕| 国外av在线| 菠萝蜜视频在线观看www入口| 日韩视频在线直播| 国产成人精品福利一区二区三区| 国产欧美精品日韩精品| 中文字幕在线日亚洲9| 成人勉费视频| 国产精品伊人色| 婷婷开心久久网| 少妇一级黄色片| 日本在线看片免费人成视1000| 一本加勒比hezyo黑人| 91免费在线观看网站| 乱亲女h秽乱长久久久| 亚洲欧美国产制服动漫| 二区三区四区高清视频在线观看| av免费在线观看网站| 亚洲乱码一区av黑人高潮| 亚洲欧美日本精品| 97久久超碰国产精品电影| 日韩av在线播| 污影院在线观看| 欧美成年人视频| 国产亚洲综合在线| 国产成人精品免费看在线播放| 成人av手机在线观看| 亚洲一区二区精品久久av| 日韩高清中文字幕一区| 久久久精品天堂| 五月婷婷丁香色| 妺妺窝人体色www在线下载| 国产精品福利一区二区三区| 精品国产免费观看| 国产精品久久久久毛片软件| 精品999久久久| 日韩欧美视频第二区| 亚洲人在线观看| 在线观看一区| 国产精品网红直播| xxx性欧美| 久久麻豆一区二区| 国产一区白浆| 国内精品卡一卡二卡三新区| 秋霞在线观看一区二区三区| 中文字幕 欧美激情| 国产精品丝袜久久久久久app| 亚洲一区区二区|