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

面向前端工程師的設(shè)計模式-適配器模式

開發(fā) 后端
適配器模式(Adapter Pattern)又稱包裝器模式,將一個類(對象)的接口(方法、屬性)轉(zhuǎn)化為用戶需要的另一個接口,解決類(對象)之間接口不兼容的問題。

1. 介紹

1.1 定義?

適配器模式(Adapter Pattern)又稱包裝器模式,將一個類(對象)的接口(方法、屬性)轉(zhuǎn)化為用戶需要的另一個接口,解決類(對象)之間接口不兼容的問題。

  • 舊的接口和使用者不兼容
  • 中間加一個適配器轉(zhuǎn)換接口

1.2 主要功能?

主要功能是進行轉(zhuǎn)換匹配,目的是復(fù)用已有的功能,而不是來實現(xiàn)新的接口。也就是說,訪問者需要的功能應(yīng)該是已經(jīng)實現(xiàn)好了的,不需要適配器模式來實現(xiàn),適配器模式主要是負責把不兼容的接口轉(zhuǎn)換成訪問者期望的格式而已。

2. 生活中的例子?

  • 電源接口的轉(zhuǎn)接頭、Type-C 轉(zhuǎn) HDMI 等視頻轉(zhuǎn)接頭。
  • 同聲傳譯,充當兩國友人互相交流的中間人

在類似場景中,這些例子有以下特點:

  • 舊有接口格式已經(jīng)不滿足現(xiàn)在的需要。
  • 通過增加適配器來更好地使用舊有接口。

3. 通用實現(xiàn)?

3.1 角色?

  • Target:目標抽象類
  • Adapter:適配器類
  • Adaptee:適配者類
  • Client:客戶類

3.2 代碼?

class Socket {
output() {
return '輸出220V';
}
}

abstract class Power {
abstract charge(): string;
}
class PowerAdapter extends Power {
constructor(public socket: Socket) {
super();
}
//轉(zhuǎn)換后的接口和轉(zhuǎn)換前不一樣
charge() {
return this.socket.output() + ' 經(jīng)過轉(zhuǎn)換 輸出24V';
}
}
let powerAdapter = new PowerAdapter(new Socket());
console.log(powerAdapter.charge());

4. 場景?

當你想用已有對象的功能,卻想修改它的接口時,一般可以考慮一下是不是可以應(yīng)用適配器模式。

  • 如果你想要使用一個已經(jīng)存在的對象,但是它的接口不滿足需求,那么可以使用適配器模式,把已有的實現(xiàn)轉(zhuǎn)換成你需要的接口。
  • 如果你想創(chuàng)建一個可以復(fù)用的對象,而且確定需要和一些不兼容的對象一起工作,這種情況可以使用適配器模式,然后需要什么就適配什么。

4.1 axios?

  • Axios
  • dispatchRequest

axios源碼中采用了process和XMLHttpRequest。 通過宿主環(huán)境的特有對象識別當前環(huán)境,適配出不同環(huán)境下如:客戶端瀏覽器和nodejs的請求方式。

  • defaults

/adapters 目錄中包含如下這些文件

├─adapters
│ http.js
│ README.md
│ xhr.js
  • xhr
  • http

適配器的入?yún)⒍际莄onfig,返回的都是promise

//let axios = require('axios');
let url = require('url');

function axios(config: any): any {
let adaptor = getDefaultAdapter();
return adaptor(config);
}

axios({
method: 'GET',
url: 'http://localhost:8080/api/user?id=1'
}).then(function (response: any) {
console.log(response);
}, function (error: any) {
console.log(error);
})

function xhr(config: any) {
return new Promise(function (resolve, reject) {
var request = new XMLHttpRequest();
request.open(config.method, config.url, true);
request.onreadystatechange = function () {
if (request.readyState == 4) {
if (request.status == 200) {
resolve(request.response);
} else {
reject('請求失敗');
}
}
}
})
}

function http(config: any) {
let http = require('http');
let urlObject = url.parse(config.url);
return new Promise(function (resolve, reject) {
const options = {
hostname: urlObject.hostname,
port: urlObject.port,
path: urlObject.pathname,
method: config.method
};
var req = http.request(options, function (res: any) {
let chunks: any[] = [];
res.on('data', (chunk: any) => {
chunks.push(chunk);
});
res.on('end', () {
resolve(Buffer.concat(chunks).toString());
});
});
req.on('error', (err: any) => {
reject(err);
});
req.end();
})
}
function getDefaultAdapter(): any {
var adapter;
if (typeof XMLHttpRequest !== 'undefined') {
adapter = xhr;
} else if (typeof process !== 'undefined') {
adapter = http;
}
return adapter;
}

server.js

let express = require('express');
let app = express();
app.get('/api/user', (req, res) => {
res.json({ id: req.query.id, name: 'zhufeng' });
});
app.listen(8080);

4.2 jQuery.ajax 適配 Axios?

有的使用 jQuery 的老項目使用 $.ajax 來發(fā)送請求,現(xiàn)在的新項目一般使用 Axios,那么現(xiàn)在有個老項目的代碼中全是 $.ajax,如果逐個修改,無疑工作量巨大而且很容易引發(fā)各種亂七八糟 bug,這時可以采用適配器模式來將老的使用形式適配到新的技術(shù)棧上:

/* 適配器 */
function ajax2AxiosAdapter(ajaxOptions) {
return axios({
url: ajaxOptions.url,
method: ajaxOptions.type,
responseType: ajaxOptions.dataType,
data: ajaxOptions.data
})
.then(ajaxOptions.success)
.catch(ajaxOptions.error)
}

/* 經(jīng)過適配器包裝 */
$.ajax = function(options) {
return ajax2AxiosAdapter(options);
}

// 測試:用 jQuery 的方式發(fā)送一個 Ajax 請求
$.ajax({
url: '/demo-url',
type: 'POST',
dataType: 'json',
data: {
name: '張三',
id: '13'
},
success: function(data) {
console.log('請求成功!')
},
error: function(err) {
console.error('請求失敗!')
}
})

可以看到老的代碼表現(xiàn)形式依然不變,但是真正發(fā)送請求是通過新的發(fā)送方式來進行的。當然你也可以把 Axios 的請求適配到 $.ajax 上,就看你如何使用適配器了。

4.3 promisify?

  • 作用:將callback形式轉(zhuǎn)換為Promise對象
  • Node中異步回調(diào)中有個約定:Error first,回調(diào)函數(shù)中的第一個參數(shù)一定是Error對象,其余參數(shù)才是正確的數(shù)據(jù)。
let fs = require('fs');
var Bluebird = require("bluebird");
let readFile = Bluebird.promisify(fs.readFile);

(async function () {
let content = await readFile('./1.txt', 'utf8');
console.log(content);
})()
function promisify(readFile: any) {
return function (filename: any, encoding: any) {
return new Promise(function (resolve, reject) {
readFile(filename, encoding, function (err: any, data: any) {
if (err)
reject(err);
else
resolve(data);
})
});
}
}

4.4 業(yè)務(wù)數(shù)據(jù)適配?

在實際項目中,我們經(jīng)常會遇到樹形數(shù)據(jù)結(jié)構(gòu)和表形數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,比如全國省市區(qū)結(jié)構(gòu)、公司組織結(jié)構(gòu)、軍隊編制結(jié)構(gòu)等等。以公司組織結(jié)構(gòu)為例,在歷史代碼中,后端給了公司組織結(jié)構(gòu)的樹形數(shù)據(jù),在以后的業(yè)務(wù)迭代中,會增加一些要求非樹形結(jié)構(gòu)的場景。比如增加了將組織維護起來的功能,因此就需要在新增組織的時候選擇上級組織,在某個下拉菜單中選擇這個新增組織的上級菜單。或者增加了將人員歸屬到某一級組織的需求,需要在某個下拉菜單中選擇任一級組織。

在這些業(yè)務(wù)場景中,都需要將樹形結(jié)構(gòu)平鋪開,但是我們又不能直接將舊有的樹形結(jié)構(gòu)狀態(tài)進行修改,因為在項目別的地方已經(jīng)使用了老的樹形結(jié)構(gòu)狀態(tài),這時我們可以引入適配器來將老的數(shù)據(jù)結(jié)構(gòu)進行適配:

/* 原來的樹形結(jié)構(gòu) */
const oldTreeData = [
{
name: '總部',
place: '一樓',
children: [
{ name: '財務(wù)部', place: '二樓' },
{ name: '生產(chǎn)部', place: '三樓' },
{
name: '開發(fā)部', place: '三樓', children: [
{
name: '軟件部', place: '四樓', children: [
{ name: '后端部', place: '五樓' },
{ name: '前端部', place: '七樓' },
{ name: '技術(shù)支持部', place: '六樓' }]
}, {
name: '硬件部', place: '四樓', children: [
{ name: 'DSP部', place: '八樓' },
{ name: 'ARM部', place: '二樓' },
{ name: '調(diào)試部', place: '三樓' }]
}]
}
]
}
]

/* 樹形結(jié)構(gòu)平鋪 */
function treeDataAdapter(treeData, lastArrayData = []) {
treeData.forEach(item {
if (item.children) {
treeDataAdapter(item.children, lastArrayData)
}
const { name, place } = item
lastArrayData.push({ name, place })
})
return lastArrayData
}

// 測試:返回平鋪的組織結(jié)構(gòu)
treeDataAdapter(oldTreeData)

增加適配器后,就可以將原先狀態(tài)的樹形結(jié)構(gòu)轉(zhuǎn)化為所需的結(jié)構(gòu),而并不改動原先的數(shù)據(jù),也不對原來使用舊數(shù)據(jù)結(jié)構(gòu)的代碼有所影響。

4.5 Vue 計算屬性?

Vue 中的計算屬性也是一個適配器模式的實例,以官網(wǎng)的例子為例,我們可以一起來理解一下:

<template>
<div id="example">
<p>Original message: "` message `"</p> <!-- Hello -->
<p>Computed reversed message: "` reversedMessage `"</p> <!-- olleH -->
</div>
</template>

<script type='text/javascript'>
export default {
name: 'demo',
data() {
return {
message: 'Hello'
}
},
computed: {
reversedMessage: function() {
return this.message.split('').reverse().join('')
}
}
}
</script>

舊有 data 中的數(shù)據(jù)不滿足當前的要求,通過計算屬性的規(guī)則來適配成我們需要的格式,對原有數(shù)據(jù)并沒有改變,只改變了原有數(shù)據(jù)的表現(xiàn)形式。

4.6 Sequelize?

基于promise的Node.js ORM工具

Sequelize

Sequelize支持MySQL、MariaDB、SQLite等數(shù)據(jù)庫方言的適配

方言

//cnpm i sequelize sqlite3 -S
const { Sequelize, Model, DataTypes } = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:');

class User extends Model { }
User.init({
username: DataTypes.STRING
}, { sequelize, modelName: 'user' });

sequelize.sync()
.then(() User.create({
username: 'zhufeng'
}))
.then(result {
console.log(result.toJSON());
});

5. 設(shè)計原則驗證?

  • 將舊接口和使用者進行分離
  • 符合開放封閉原則

6. 優(yōu)缺點?

6.1 優(yōu)點?

  • 已有的功能如果只是接口不兼容,使用適配器適配已有功能,可以使原有邏輯得到更好的復(fù)用,有助于避免大規(guī)模改寫現(xiàn)有代碼。
  • 可擴展性良好,在實現(xiàn)適配器功能的時候,可以調(diào)用自己開發(fā)的功能,從而方便地擴展系統(tǒng)的功能。
  • 靈活性好,因為適配器并沒有對原有對象的功能有所影響,如果不想使用適配器了,那么直接刪掉即可,不會對使用原有對象的代碼有影響。

6.2 缺點?

會讓系統(tǒng)變得零亂,明明調(diào)用 A,卻被適配到了 B,如果系統(tǒng)中這樣的情況很多,那么對可閱讀性不太友好。如果沒必要使用適配器模式的話,可以考慮重構(gòu),如果使用的話,可以考慮盡量把文檔完善。

7. 其他相關(guān)模式?

7.1 適配器模式與代理模式?

  • 適配器模式:提供一個不一樣的接口,由于原來的接口格式不能用了,提供新的接口以滿足新場景下的需求。
  • 代理模式:提供一模一樣的接口,由于不能直接訪問目標對象,找個代理來幫忙訪問,使用者可以就像訪問目標對象一樣來訪問代理對象。

7.2 適配器模式、裝飾者模式與代理模式?

  • 適配器模式:功能不變,只轉(zhuǎn)換了原有接口訪問格式。
  • 裝飾者模式:擴展功能,原有功能不變且可直接使用。
  • 代理模式:原有功能不變,但一般是經(jīng)過限制訪問的。

?文章出自:??前端餐廳ReTech??,如有轉(zhuǎn)載本文請聯(lián)系前端餐廳ReTech今日頭條號。

github:https://github.com/zuopf769

責任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-02-13 23:33:24

設(shè)計模式Java

2020-10-25 08:56:21

適配器模式

2021-02-18 08:39:28

設(shè)計模式場景

2013-11-26 16:39:21

Android設(shè)計模式

2012-05-16 17:22:11

Java設(shè)計模式

2022-02-18 17:21:29

適配器模式客戶端

2024-02-22 12:13:49

適配器模式代碼

2024-07-31 10:41:16

C#設(shè)計模式

2012-04-12 09:33:02

JavaScript

2013-02-26 10:55:47

C#適配器設(shè)計模式

2012-08-02 10:46:34

JavaAdapter模式

2024-04-10 12:27:43

Python設(shè)計模式開發(fā)

2022-05-29 22:55:00

適配器設(shè)計模式

2021-08-16 17:15:19

設(shè)計模式Android適配器模式

2021-02-16 08:16:09

適配器模式MybatisJava

2009-11-18 18:08:20

PHP適配器模式

2023-08-15 11:07:37

適配器模式TypeScript

2023-09-06 13:20:00

適配器模式兼容性

2022-04-05 13:56:48

設(shè)計模式javascript

2020-11-09 09:10:31

javascript設(shè)
點贊
收藏

51CTO技術(shù)棧公眾號

国产欧美自拍一区| 午夜老司机在线观看| 激情六月综合| 亚洲欧美国产制服动漫| 99视频在线免费| 91啦中文在线| 国产成人在线色| 91成人福利在线| 亚洲一级黄色录像| 老司机亚洲精品一区二区| 亚洲成人在线免费| 欧美日韩一区二区三区在线视频 | 色欧美88888久久久久久影院| 日产精品久久久一区二区| 国产精品视频无码| 欧美日韩一区自拍| 揄拍成人国产精品视频| 亚洲网中文字幕| av综合电影网站| 亚洲免费资源在线播放| 欧美精品久久久| www.桃色av嫩草.com| 久久在线精品| 欧美国产欧美亚洲国产日韩mv天天看完整| 在线观看日韩精品视频| 3d动漫一区二区三区在线观看| 香蕉成人啪国产精品视频综合网 | 成人黄色免费看| 国产性xxxx高清| 伊人色**天天综合婷婷| 国产亚洲欧美视频| 亚洲久久久久久| 精品一区二区三区亚洲| 蜜臀久久99精品久久久| 亚洲中字黄色| 欧美大荫蒂xxx| 麻豆视频免费在线播放| 天堂日韩电影| 精品国产伦理网| 91网址在线观看精品| 日本国产欧美| 一本大道久久a久久综合| www.av毛片| 暖暖在线中文免费日本| 一区免费观看视频| 水蜜桃一区二区三区| 你懂的视频在线播放| av一区二区三区在线| 成人18视频| 99久久久久成人国产免费| 蜜桃一区二区三区在线| 国产精品成人aaaaa网站| 国产成人免费观看视频| 1024日韩| 97avcom| 国产中文字字幕乱码无限| 欧美伊人久久| 久久大大胆人体| 精品少妇一区二区三区密爱| 成人一区而且| 中文字幕一精品亚洲无线一区| av女人的天堂| 精品视频免费| 中文字幕亚洲一区二区三区| 5566中文字幕| 国产精品黑丝在线播放| 久久艳片www.17c.com| 四虎精品免费视频| 欧美精品97| 久久久久久久久网站| 日本在线观看视频网站| 国产模特精品视频久久久久| 欧美自拍大量在线观看| 国产欧美日韩网站| 精品一区二区在线观看视频| 欧美理论在线播放| 色老头一区二区三区| 日韩国产第一页| 欧美 日韩 国产一区二区在线视频| 久久久黄色av| 久久久.www| 国产精品一区毛片| 国产99在线|中文| 一级黄色片在线看| 国产一区91精品张津瑜| 黑人另类av| 男人的天堂在线| 国产精品久久久久久亚洲毛片 | 一区二区国产在线| 欧美精品xxx| 久久精品视频5| 精品一区二区三区香蕉蜜桃| 懂色av一区二区三区在线播放| 五月婷婷在线观看视频| 国产日本欧美一区二区| 黄色免费高清视频| 超碰在线99| 欧美中文字幕一区二区三区| 欧美视频亚洲图片| 任我爽精品视频在线播放| 亚洲欧洲第一视频| 疯狂撞击丝袜人妻| 日韩一级在线| 国产综合在线观看视频| 少妇av一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 国产欧美综合一区| 超级碰碰久久| 日韩精品在线网站| 91精品人妻一区二区三区| 91精品亚洲| 国产精品系列在线播放| 国产精品久久国产精品99gif| 国产精品伦理一区| ww久久中文字幕| 亚洲小视频在线播放| 全亚洲第一av番号网站| 日韩女优视频免费观看| 精品欧美一区二区久久久| 欧美不卡在线| 国产精品第二页| 少妇喷水在线观看| 亚洲欧美日韩中文播放| 人妻内射一区二区在线视频| 日韩在线观看中文字幕| 中文字幕日韩有码| 国产精品500部| 国产精品一区二区在线观看不卡 | 波多野结衣一区| 国内揄拍国内精品少妇国语| 国产精品自拍电影| 欧美韩日一区二区三区四区| 奇米精品一区二区三区| 日韩高清一区| 日韩视频免费在线| 久久久精品毛片| 91在线高清观看| 在线亚洲+欧美+日本专区| 一区二区三区观看| 欧亚一区二区| 日韩精品www| 国产在线视频卡一卡二| 国产精品一区二区在线观看网站| 亚洲国产一区二区精品视频| 韩国美女久久| 亚洲精品97久久| 国产网友自拍视频| 国产成人自拍高清视频在线免费播放| 正义之心1992免费观看全集完整版| 亚洲播播91| 亚洲久久久久久久久久| 国产精品黄色大片| 99久久777色| av免费观看大全| 久久久久久毛片免费看| 久久人人爽人人爽人人片av高清| 国产毛片久久久久| 亚洲人成亚洲人成在线观看图片 | 国产成人在线免费观看| 粉嫩av一区二区三区天美传媒| 一区二区三区日本视频| 久久久91精品| www.日韩高清| 亚洲国产成人91porn| 国产在线不卡av| 亚洲大胆av| 九色91国产| 成人短视频app| 国产精品免费99久久久| 久久精品成人欧美大片古装| 97在线播放免费观看| 中文字幕精品一区二区精品绿巨人| 熟妇人妻无乱码中文字幕真矢织江| 国产亚洲一区二区三区不卡| 国产精品自产拍在线观| bestiality新另类大全| 日韩精品专区在线影院观看| 日韩福利片在线观看| www国产亚洲精品久久麻豆| 狠狠操精品视频| 久久国产电影| 91视频最新| 国模精品视频| 伊人久久久久久久久久久| 在线免费观看一区二区| 亚洲欧美在线观看| 久久久久无码国产精品一区李宗瑞 | mm视频在线视频| 亚洲欧美国产另类| 一区二区三区www污污污网站| 亚洲免费观看在线视频| 国产精品久久久久久亚洲色| 久久国产精品久久w女人spa| 中文字幕日韩精品一区二区| 91精品国产自产在线丝袜啪| 日韩av男人的天堂| 精品自拍一区| 日韩国产精品一区| 日日噜噜夜夜狠狠久久丁香五月| 久草免费在线| 亚洲成人精品av| 中文字幕在线视频免费| 亚洲曰韩产成在线| 黑人巨大精品欧美| 精品亚洲aⅴ乱码一区二区三区| 日本一本中文字幕| 欧美日韩国产免费观看视频| 国产成人精品日本亚洲11| 先锋欧美三级| 97精品国产97久久久久久| 国产香蕉视频在线看| 精品三级av在线| 在线免费观看av片| 精品magnet| 91视频综合网| 国产情人综合久久777777| 免费在线观看日韩av| 蜜桃传媒麻豆第一区在线观看| 欧洲精品一区二区三区久久| 91亚洲国产| 日本高清不卡一区二区三| 精品国产一级| 国产精品永久免费视频| 在线观看福利电影| 欧美国产日本在线| caoporm免费视频在线| 中文字幕免费国产精品| 天天在线女人的天堂视频| 日韩视频一区在线观看| 亚洲视频一区在线播放| 色素色在线综合| 日本久久精品一区二区| 51精品在线| 色中色综合影院手机版在线观看| 91露出在线| 国产一区二区三区在线| 神马久久高清| 亚洲精品美女免费| 欧美视频xxx| 日韩欧美一区在线观看| 国产精品自拍电影| 在线播放91灌醉迷j高跟美女 | 在线heyzo| 深夜精品寂寞黄网站在线观看| 黄色电影免费在线看| 日韩高清免费在线| 少妇高潮一区二区三区69| 精品久久五月天| 亚洲h视频在线观看| 欧美一级精品在线| 国产成人精品av在线观| 91精品国产福利| 国产日韩欧美视频在线观看| 在线不卡的av| 国产欧美日韩成人| 欧美丰满美乳xxx高潮www| 一区二区美女视频| 日韩一区二区三区电影| 99热这里只有精| 日韩欧美高清一区| 精品人妻一区二区三区换脸明星| 日韩视频在线观看一区二区| 成人久久久精品国产乱码一区二区| 日韩免费观看高清完整版在线观看| 国产按摩一区二区三区| 欧美精品一区二区三区久久久| 欧洲成人一区二区三区| 日韩国产精品视频| 成年人视频网站在线| www.欧美免费| 在线看福利影| 久久久久亚洲精品| 亚洲欧洲自拍| 国产精品视频白浆免费视频| 日韩国产一二三区| 91av免费看| 欧美日韩导航| 日韩欧美视频一区二区| 99视频精品视频高清免费| 国产精品自拍合集| 99视频+国产日韩欧美| 热久久精品免费视频| 精品一二三四区| 日韩黄色一区二区| 91农村精品一区二区在线| 久久丫精品忘忧草西安产品| 中文字幕一区二区三区在线不卡| 精品99在线观看| 欧美性xxxxx极品娇小| 一二三区在线播放| 欧美一卡二卡三卡| 爽爽视频在线观看| 精品国内产的精品视频在线观看| 欧美极品少妇videossex| 欧美中文字幕在线播放| 91精品福利观看| 久久精品日产第一区二区三区| 人人狠狠综合久久亚洲婷| 777久久精品一区二区三区无码| 亚洲一卡久久| 日本在线观看视频一区| 91视频你懂的| 亚洲二区在线播放| 欧美色xxxx| 精品国产伦一区二区三区| 亚洲免费小视频| 青青在线视频| 国产精品美女www| 欧美日韩导航| 日韩视频一二三| 日韩电影在线免费看| 日批视频免费看| 国产精品久久久久影院亚瑟 | 欧美99在线视频观看| 国产熟女高潮视频| 国产精品2024| 青青青视频在线播放| 婷婷久久综合九色综合绿巨人| 亚洲一区二区色| 亚洲欧美另类自拍| 国产偷倩在线播放| 国产在线高清精品| 国产亚洲一区二区三区啪| 国产中文字幕二区| 国产成人精品无码播放| av中文字幕亚洲| 中文字幕亚洲欧美日韩| 欧美视频一二三区| 亚洲欧美综合一区二区| 欧美国产亚洲精品久久久8v| 亚洲成a人片777777久久| 欧美极品一区| 模特精品在线| 欧美一级片黄色| 一区二区三区成人在线视频| 国产精品久久久久久久成人午夜| 亚洲片国产一区一级在线观看| 韩国精品一区| 成人av播放| 午夜欧美精品| 中文字幕乱码在线人视频| 国产精品麻豆网站| 国产在线观看第一页| 亚洲天堂男人天堂女人天堂| 筱崎爱全乳无删减在线观看| 久久av二区| 国产日韩欧美一区| 久久久国产精品无码| 亚洲va天堂va国产va久| 亚洲第一天堂在线观看| 欧美理论片在线观看| 日本一区影院| 国产女人18毛片| 国产精品一二三四五| 蜜臀久久精品久久久用户群体| 在线播放91灌醉迷j高跟美女 | 国产1区在线观看| 欧美日韩成人黄色| 国产成人tv| 国内精品在线观看视频| 91麻豆免费观看| www.国产毛片| 一区二区在线免费视频| 成人国产精品| 吴梦梦av在线| 高清不卡在线观看av| 国产精品7777777| 亚洲欧美日韩区| 久久青草免费| 日韩a级黄色片| 99久久er热在这里只有精品15 | 欧美日本在线一区| 国产激情在线视频| 国产精品一区而去| 另类天堂av| 日韩av毛片在线观看| 日韩精品一区二区三区在线| 少妇视频在线观看| 午夜视频久久久| 国产激情91久久精品导航| 久草国产精品视频| 亚洲欧美激情视频| 亚洲成a人片777777久久| 日韩精品一区二区三区四| 91在线你懂得| 亚洲一区二区影视| 欧美激情在线狂野欧美精品| 一道在线中文一区二区三区| 亚洲国产成人va在线观看麻豆| 亚洲综合另类小说| 美女欧美视频在线观看免费 | 国产三区在线播放| 国内精品久久久久久中文字幕| 免费短视频成人日韩| 午夜免费一级片| 欧美性猛交xxxx偷拍洗澡| 麻豆视频在线免费观看| 好吊色欧美一区二区三区| 美女视频黄a大片欧美| 中文在线观看免费网站|