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

JavaScript設計模式之抽象工廠及工廠方法模式

開發 前端
本文作者擅長于前臺代碼的開發,對于設計模式也比較了解,作者通過結合JavaScript來設計前臺方面的“設計模式”,以對后臺“設計模式”做個補充,希望可以給部分讀者帶來幫助。

概述

抽象工廠模式廣泛應用于因為需求變動導致一些相似對象的創建工作,拿我們做項目最熟悉的多版本數據庫,根據數據庫的不同,有可能有SQL Server,Access,Oracle,My SQL版本等等的數據庫,這樣我們就能運用工廠模式,把各個數據庫中相似的功能操作封裝到它們各自的對象模型中,通過工廠對象統一創建各個對象實例,是客戶程序和這些具體對象實現了松耦合;而工廠方法模式主要是針對某個對象的需求變更,但是這個對象不會隨著它的變動而導致它所在的業務流程中的變動,它具有高聚合的能力,因此它的外部接口是很穩定的;

定義

抽象工廠模式是每個抽象產品派生多個具體產品類,每個抽象工廠派生多個具體工廠類,每個具體工廠負責多個(一系列)具體產品的實例創建。

工廠方法模式是每個抽象產品派生多個具體產品類,每個抽象工廠類派生多個具體工廠類,每個具體工廠類負責一個具體產品的實例創建。

類圖

抽象工廠模式類圖

工廠方法模式類圖

#p#

實例分析

在開始工廠模式之前,有必要先介紹下簡單工廠的說法,為了避免在客戶程序的對象出現"if...else..."代碼難以擴展以及維護,這里創建一個工廠類來封裝這些對象,那這個就應用了簡單工廠的方式。

這個場景是這樣,有個博客網站,在網站中用戶分為幾種類型,我這里暫且暫且分為游客,博客會員,超級管理員三種用戶權限:

◆游客只能進行簡單的查看博客的文章,個人資料等等;

◆博客會員還可以對自己的博客進行管理;

◆超級管理員還可以對于博客系統后臺進行管理。

在開始介紹之前,先貼出前兩篇介紹的一些接口和類繼承的JS文件InterfaceAndClass.js,這里主要要說的是類繼承的寫法:

function inheritClass(subClass, superClass)
{    
    var Func = function() {};
    for(p in superClass.prototype)
    {
        Func.prototype[p] = superClass.prototype[p];
    }
    subClass.prototype = new Func();
    subClass.prototype.constructor = subClass;
}

這里將父類superClass原型的所有方法賦值給新創建的函數類,之后把函數類的原型賦值于子類subClass原型中。

一、現在先對JavaScript簡單工廠進行介紹:

1. 添加用戶類型接口IMember.js:

var IMember = new Interface("IMember", [["getMemberInfo"]]);

getMemberInfo做為IMember接口的接口方法。

2.  添加三個具體用戶類型的類Guest.js,BlogMember.js,SuperAdmin.js,繼承IMember接口:

//游客類
function Guest() { 
    Interface.registerImplements(this, IMember); //繼承IMember接口
}
Guest.prototype = {
    getMemberInfo : function() {
        return "游客";
    },
    getData : function() {
        return "";
    }
}

//博客會員類
function BlogMember() {
    Interface.registerImplements(this, IMember);
}
BlogMember.prototype = {
    getMemberInfo : function() {
        return "博客會員";
    },
    getData : function() {
        return "";
    }
}

//超級管理員類
function SuperAdmin() {
    Interface.registerImplements(this, IMember);
}
SuperAdmin.prototype = {
    getMemberInfo : function() {
        return "超級管理員";
    }, 
    getData : function() {
        return "";
    }
}

3. 創建一個用戶類型工廠類來封裝這些用戶類型的操作,添加MemberFactory.js:

var MemberFactory = {
    createMemberType : function(memberType) {
        var  _memberType;
        switch(memberType)
        {
            case "guest": _memberType = new Guest(); break;
            case "blogmember": _memberType = new BlogMember(); break;
            case "superadmin": _memberType = new SuperAdmin(); break;
            default: _memberType = new BlogMember(); break;
        }
        return _memberType;
    }
}

通過memberType的“枚舉”,創建相應的用戶類型類的對象;

4. 至此,通過MemberFactory.createMemberType的“靜態方法”返回一個用戶類型對象;

var member = MemberFactory.createMemberType("guest");  //guest, blogmember, superadmin
$("#result").html("您當前為:" + member.getMemberInfo());

(這里$(“…”)寫法是jquery類庫中的語法,詳細請看官方文檔http://jquery.com/

#p#

二、接下來開始本篇的重點,JavaScript工廠模式的網站應用

1. 延續上面的博客網站的場景:

游客只能進行簡單的查看博客的文章,個人資料等等;

博客會員還可以對自己的博客進行管理;

超級管理員還可以對于博客系統后臺進行管理;

這里有這些標簽Tab:首頁,文章,電影,音樂,相冊,關于我,文章管理,個人資料管理,系統后臺管理,其中 游客只能訪問“首頁,文章,電影,音樂,相冊,關于我”,博客會員(登錄后)增加訪問“文章管理,個人資料管理”,超級管理員增加訪問“系統后臺管理”;另外博客會員和超級管理員擁有修改皮膚顏色和版塊類型的功能;

最終頁面顯示如下所示:

 從圖上可以看出,博客會員以上的用戶類型可以顯示“文章管理,個人資料管理”標簽,超級管理員可以顯示“系統后臺管理”;而布局選擇包括“左,中,右結構”,“左,右上,右下結構”,“左上,左下,右結構”,顏色包括“藍”,“紅”,“綠”,“紫”,這里只能博客會員和超級管理員才可以顯示;
(這里我使用了網上提供的jquery.tab.js插件對標簽進行實現,詳細請看http://stilbuero.de/jquery/tabs_3/

好了,現在開始介紹這個實例通過JavaScript工廠模式是如何實現的。

2. IMember.js不變,從簡單工廠中直接復制。

3. IMember的具體實現類Guest,BlogMember,SuperAdmin從簡單工廠中復制,這里分別添加個原型方法isSetColorBlock,判斷該用戶類型是否可設置顏色和布局,如下所示:

Guest.prototype = {
    //…
    isSetColorBlock : function() {
        return false;
    }
}

BlogMember.prototype = {
    //…
    isSetColorBlock : function() {
        return true;
    }
}

SuperAdmin.prototype = {
    //…
    isSetColorBlock : function() {
        return true;
    }
}

可以看到游客不能進行設置,而博客會員和超級管理能進行設置;

4. MemberFactory.js不變,從簡單工廠直接復制。

5. 添加IBlock.js,創建布局接口:

var IBlock = new Interface("IBlock", [["getData"]]);

6. 實現它的具體類,這里添加LMRBlock.js(左 中 右 布局),LRMBlock.js(左上 左下 右 布局),MLRBlock.js(左 右上 右下 布局),這里以LMRBlock.js為例:

// 左、中、右結構樣式版塊
function LMRBlock()
{
    this.color = "blue";
    Interface.registerImplements(this, IBlock); //繼承布局IBlock接口
}
LMRBlock.prototype = {
    displayBlock : function() {
        this.getData();
        // 具體布局實現
    },
    getData : function() {
        return new Error("抽象方法,不能調用");
    }
}

這里首先創建的是類似于一個抽象類,該類首先繼承于布局接口,從代碼中可以看出getData方法的實現返回錯誤異常,實際上它作為一個抽象方法,不需要實現任何東西;這里displayBlock方法中調用它的抽象方法,這里就是典型的抽象方法模式,以備于它的子類繼承實現它的抽象方法;

現在看看它的子類有哪些:

function BlueLMRBlock(){
}
inheritClass(BlueLMRBlock, LMRBlock); //繼承LMRBlock抽象類
BlueLMRBlock.prototype.getData = function() { //父類抽象方法的具體實現
    $(".tabs-nav a, .tabs-nav a span").css({"background-image":"url(script/tab/tab_blue.png)"});
    this.color = "blue";
}

function GreenLMRBlock(){
}
inheritClass(GreenLMRBlock, LMRBlock);
GreenLMRBlock.prototype.getData = function() {
    $(".tabs-nav a, .tabs-nav a span").css({"background-image":"url(script/tab/tab_green.png)"});
    this.color = "green";
}

function RedLMRBlock(){
}
inheritClass(RedLMRBlock, LMRBlock);
RedLMRBlock.prototype.getData = function() {
    $(".tabs-nav a, .tabs-nav a span").css({"background-image":"url(script/tab/tab_red.png)"});
    this.color = "red";
}

function VioletLMRBlock(){
}
inheritClass(VioletLMRBlock, LMRBlock);
VioletLMRBlock.prototype.getData = function() {
    $(".tabs-nav a, .tabs-nav a span").css({"background-image":"url(script/tab/tab_violet.png)"});
    this.color = "violet";
}

這里包括4種顏色的子類,全部都繼承于抽象類LMRBlock,子類中getData的方法做為抽象方法的具體實現;

#p#

7. 現在該創建個工廠來實現它們了,添加BlockFactory.js文件,首先創建布局抽象工廠類:

function BlockFactory(){
}
BlockFactory.prototype = {
    getBlock : function(block) {
        var _block;
        _block = this.createBlock(block);
        
        // 添加其他邏輯
        // 
        
        return _block;
    },
    createBlock : function(block) {
        return new Error("抽象方法,不能調用");
    },
    getBlockText : function() {
        return new Error("抽象方法,不能調用");
    }
};

這里createBlock和getBlockText同樣是做為抽象方法;

現在要創建三個繼承于這個布局抽象工廠類,LMRBlockFactory,LRMBlockFactory,MLRBlockFactory,這里同樣以LMRBlockFactory為例:

function LMRBlockFactory(){ 
}
inheritClass(LMRBlockFactory,BlockFactory);
LMRBlockFactory.prototype.createBlock = function(block) {
    var _block;
    switch(block)
    {
        case "blue": _block = new BlueLMRBlock(); break;
        case "red": _block = new RedLMRBlock(); break;
        case "green": _block = new GreenLMRBlock(); break;
        case "violet": _block = new VioletLMRBlock(); break;
        default: _block = new BlueLMRBlock(); break;
    }
    return _block;
};
LMRBlockFactory.prototype.getBlockText = function() {
    return "LMR";
};

LMRBlockFactory繼承于布局抽象工廠類,實現它的抽象方法createBlock和getBlockText,其中creatBlock通過參數值,創建對應的布局實現類,這里用到了典型的抽象工廠模式;

8. 好了,一切都具備好了,現在開始討論我們的前臺使用了,添加factory.html,引用該引用的JS文件,這里列出一些核心代碼:

1) 添加初始化數據

var membertype = "superadmin"; //從用戶類型得到值,這里是個假設,包含三個類型用戶:
guest,blogmember,superadmin var color = "blue"; //這里是初始化顏色,包括四種顏色:blue,green,red,violet var blockfactory; //布局工廠類的全局變量聲明

(你可以通過用戶登錄將登錄信息存入cookies中,從cookies獲取用戶類型和用戶選擇色調)

2) 初始化用戶類型

// 初始化用戶類型
var member = MemberFactory.createMemberType(membertype);
$("#spanMemberType").html(member.getMemberInfo());
$("#container-1 li[id^='li']").css("display","block");
$("#container-1 li[id^='li']").each(function(index){
    var arr = $(this).attr("power").split('|'); //取得對應標簽的權限數組
    if(arr.indexOf(membertype) == -1) //權限比較
    {
        $(this).css("display","none");
        $("#fragment-" + (index+1)).css("display","none");
    }
 });
if(member.isSetColorBlock()) //是否可設置布局和顏色
    $("#Set").css("display","block");
else
    $("#Set").css("display","none");
$("#selMemberType").val(membertype);

通過var member = MemberFactory.createMemberType(membertype);獲取用戶對象,通過用戶對象判斷是否可設置布局和顏色;

3) 初始化版塊類型和顏色類型

// 初始化版塊類型和顏色類型
blockfactory = new LMRBlockFactory();
var block = blockfactory.getBlock(color);
block.displayBlock();
$("img[id^='imgcolor_']").removeClass().addClass("color-unselected");
$("#imgcolor_" + color).removeClass().addClass("color-selected");

通過創建工廠對象,從顏色中獲取布局實現類的對象,然后通過調用displayBlock方法的實現初始化界面的布局;

前臺JS代碼完整實現如下:

var membertype = "superadmin"; //從用戶類型得到值,這里是個假設,包含三個類型用戶:guest,blogmember,superadmin
    var color = "blue"; //這里是初始化顏色,包括四種顏色:blue,green,red,violet
    var blockfactory; //布局工廠類的全局變量聲明
    $(function() {
        $("#container-1").tabs();
        
        // 初始化用戶類型
        var member = MemberFactory.createMemberType(membertype);
        $("#spanMemberType").html(member.getMemberInfo());
        $("#container-1 li[id^='li']").css("display","block");
        $("#container-1 li[id^='li']").each(function(index){
            var arr = $(this).attr("power").split('|'); //取得對應標簽的權限數組
            if(arr.indexOf(membertype) == -1) //權限比較
            {
                $(this).css("display","none");
                $("#fragment-" + (index+1)).css("display","none");
            }
        });
        if(member.isSetColorBlock()) //是否可設置布局和顏色
            $("#Set").css("display","block");
        else
            $("#Set").css("display","none");
        $("#selMemberType").val(membertype);
        // 初始化版塊類型和顏色類型
        blockfactory = new LMRBlockFactory();
        var block = blockfactory.getBlock(color);
        block.displayBlock();
        $("img[id^='imgcolor_']").removeClass().addClass("color-unselected");
        $("#imgcolor_" + color).removeClass().addClass("color-selected");

        // 用戶類型下拉框綁定
        $("#selMemberType").bind("change", function() {
            $('#container-1').triggerTab(1);
            var mt = $(this).val();
            membertype = MemberFactory.createMemberType(mt);
            $("#spanMemberType").html(membertype.getMemberInfo());
            $("#container-1 li[id^='li']").css("display","block");
            $("#container-1 li[id^='li']").each(function(index){
                var arr = $(this).attr("power").split('|');
                if(arr.indexOf(mt) == -1)
                {
                    $(this).css("display","none");
                    $("#fragment-" + (index+1)).css("display","none");
                }
            });
            if(membertype.isSetColorBlock())
                $("#Set").css("display","block");
            else
                $("#Set").css("display","none");
        });
        // 版塊類型選擇
        $("img[id^='imgblock_']").bind("click", function() {
            if($(this).className != "block-selected")
            {
                $("img[id^='imgblock_']").removeClass().addClass("block-unselected");
                $(this).removeClass().addClass("block-selected");
            }
            var blocktext = $(this).attr("id").substring(9);
            switch(blocktext)
            {
                case "LMR": blockfactory = new LMRBlockFactory(); break;
                case "LRM": blockfactory = new LRMBlockFactory(); break;
                case "MLR": blockfactory = new MLRBlockFactory(); break;
                default: blockfactory = new LMRBlockFactory(); break;
            }
            var block = blockfactory.getBlock(color);
            block.displayBlock();
        });
        // 顏色選擇
        $("img[id^='imgcolor_']").bind("click", function() {
            color = $(this).attr("id").substring(9);
            var block = blockfactory.getBlock(color);
            block.displayBlock();
            $("img[id^='imgcolor_']").removeClass().addClass("color-unselected");
            $("#imgcolor_" + color).removeClass().addClass("color-selected");
        });
    });

至此,抽象工廠和工廠方法模式的一些思路已經應用在該博客系統中。

【編輯推薦】

  1. Javascript面向對象基礎以及接口和繼承類的實現
  2. 使用JavaScript更新UpdatePanel
  3. JavaScript+CSS實現網頁換膚功能
責任編輯:楊鵬飛 來源: 博客園
相關推薦

2020-08-11 11:20:30

Typescript設計模式

2021-03-06 22:50:58

設計模式抽象

2013-11-26 16:29:22

Android設計模式

2010-10-09 09:25:35

Python工廠模式

2021-09-29 13:53:17

抽象工廠模式

2020-10-19 09:28:00

抽象工廠模式

2024-02-20 12:09:32

模式工廠方法接口

2011-07-28 09:50:58

設計模式

2011-11-17 16:03:05

Java工廠模式Clojure

2020-08-21 07:23:50

工廠模式設計

2019-08-16 10:46:46

JavaScript工廠模式抽象工廠模式

2024-03-06 13:19:19

工廠模式Python函數

2010-04-19 09:30:00

工廠模式PHP設計模式

2022-01-12 13:33:25

工廠模式設計

2020-12-17 09:38:16

設計模式參數

2022-05-09 08:04:50

工廠模式設計模式

2015-11-03 09:43:43

avascript設計模式工廠模式

2023-08-05 13:31:20

工廠方法模式對象

2024-09-14 08:24:44

設計模式抽象工廠模式JDK

2020-09-14 17:26:48

抽象工廠模式
點贊
收藏

51CTO技術棧公眾號

成人免费一区| 国产最新视频在线观看| 国产一区日韩一区| 在线看日本不卡| 中文字幕剧情在线观看一区| 香蕉污视频在线观看| 日韩毛片视频| 欧美影院一区二区三区| 日本xxx免费| 欧美少妇另类| 国产一区二区不卡老阿姨| 26uuu国产精品视频| 国产中文字幕久久| 欧美调教在线| 91官网在线免费观看| 成人免费看片视频在线观看| 黄色国产在线| 蜜桃91丨九色丨蝌蚪91桃色| 欧美极品少妇与黑人| 日韩不卡av在线| 女同一区二区三区| 日韩一级高清毛片| www.精品在线| 欧美黑人一区| 精品久久久久久中文字幕一区奶水 | 99久久99久久精品国产片| 国产精品一区二区6| 99国产**精品****| 精品少妇一区二区三区视频免付费 | 别急慢慢来1978如如2| 日本片在线观看| 中文字幕一区在线观看| 欧美极品jizzhd欧美| 欧美一区二区黄片| 免费观看在线综合色| 人人澡人人澡人人看欧美| 不卡的免费av| 亚洲无线视频| 久久99精品视频一区97| 性欧美18—19sex性高清| 亚洲香蕉久久| 欧美日韩一卡二卡三卡 | 天堂在线视频观看| 国产成人亚洲精品青草天美| 成人国产精品一区| 国产精品99re| 亚洲小说欧美另类婷婷| 欧美精品制服第一页| 放荡的美妇在线播放| 99热国内精品永久免费观看| 色爱av美腿丝袜综合粉嫩av| 国产a√精品区二区三区四区| 午夜裸体女人视频网站在线观看| 中文字幕免费观看一区| 日韩一区国产在线观看| 国产乱子伦三级在线播放| 国产精品自在在线| 日本中文字幕久久看| 久久久久99精品成人片试看| 亚洲乱码免费伦视频| 久久国产精品亚洲| 国产亚洲欧美久久久久| 亚洲激情偷拍| 欧美在线视频免费播放| 日日骚av一区二区| 日本美女一区二区| 成人a在线观看| 国产成人毛毛毛片| 日韩在线观看一区二区| 国产精品成人播放| 亚洲熟女乱色一区二区三区久久久| 亚洲日本激情| 欧美亚洲另类视频| 成年人视频免费| 国产精品丝袜xxxxxxx| 欧美在线性爱视频| 黄色污污视频软件| 国产制服丝袜一区| 黄色99视频| 国产有码在线| 亚洲人成网站在线| 成人在线免费观看视频网站| 草莓视频丝瓜在线观看丝瓜18| 中文字幕一区二区三| 99热一区二区三区| 国产福利电影在线播放| 亚洲综合在线观看视频| 7777在线视频| 日本最黄一级片免费在线| 亚洲天堂av一区| 久操网在线观看| 国产v综合v| 欧美一区二区三区视频在线观看| 在线不卡一区二区三区| 嗯用力啊快一点好舒服小柔久久| 欧美刺激脚交jootjob| 亚洲第一黄色网址| 婷婷丁香综合| 91探花福利精品国产自产在线| chinese少妇国语对白| 成人四虎影院| 亚洲第一男人av| 黄免费在线观看| 综合一区二区三区| 日韩av电影在线播放| 免费观看成人毛片| 国内外成人在线视频| 精品一区二区日本| 97超碰资源站在线观看| 色婷婷狠狠综合| 免费在线观看日韩av| 国内黄色精品| 国产69精品久久久久99| 在线播放成人av| 91性感美女视频| 神马午夜伦理影院| 日本电影在线观看| 欧美日韩在线精品一区二区三区激情| 午夜国产一区二区三区| 成人三级毛片| 久久精品国产v日韩v亚洲| 黄色片免费观看视频| 国产精品系列在线观看| 午夜精品福利一区二区| 亚洲一级少妇| 精品美女在线播放| 无码人妻精品一区二区三区温州| 一道在线中文一区二区三区| 欧美国产第一页| 97精品人妻一区二区三区在线| 国产成人免费xxxxxxxx| 黄色99视频| www 日韩| 在线视频你懂得一区二区三区| 日韩精品视频一二三| 亚洲国产精品免费视频| 亚洲激情视频网站| 麻豆changesxxx国产| 精品中文字幕一区二区小辣椒| 97超级在线观看免费高清完整版电视剧| 午夜精品久久久久久久96蜜桃| 成人av片在线观看| 天堂av在线中文| 国产电影一区| 久久久成人av| 国产精品久久久久久免费免熟 | 国产91美女视频| 99国产精品免费网站| 亚洲色图综合久久| 国产一级片免费在线观看| 2017欧美狠狠色| 日韩精品视频久久| 亚洲国产网址| 国产v综合v亚洲欧美久久| 青青草免费观看免费视频在线| 综合久久一区二区三区| 午夜激情影院在线观看| 97久久视频| 亚洲在线观看视频| 女子免费在线观看视频www| 欧美大片在线观看一区| 岛国片在线免费观看| 蜜臀久久久99精品久久久久久| 官网99热精品| xxxcom在线观看| 日韩高清欧美高清| 国产黄色免费视频| 亚洲视频资源在线| 午夜久久久精品| 99久久亚洲精品| 99久热re在线精品996热视频| av电影在线网| 4438x亚洲最大成人网| 久久97人妻无码一区二区三区| 久久精品国产99| 特级西西444| 欧美videos粗暴| 麻豆成人在线看| 天天爱天天干天天操| 色综合 综合色| 日韩在线不卡av| 粉嫩蜜臀av国产精品网站| 日韩在线一级片| 日韩欧美午夜| 国产经品一区二区| 日本孕妇大胆孕交无码| 精品一区二区亚洲| 91亚洲精品国偷拍自产在线观看| 国产欧美日韩视频在线观看| av观看免费在线| 91亚洲一区| 国产亚洲精品久久飘花| 日本黄色一区| 欧美激情图片区| 国产尤物视频在线| 在线观看免费亚洲| 久久久久无码国产精品不卡| 久久久精品黄色| 精品人妻一区二区乱码| 美女精品在线观看| 国产又粗又长又爽视频| 你懂的一区二区三区| 91久久爱成人| 91精品国产66| 7777精品久久久久久| 日本免费在线视频| 欧美一区二区视频观看视频| 成人免费a视频| 亚洲综合免费观看高清完整版 | 精品久久亚洲| 日韩免费观看高清| 久色国产在线| 久久精品2019中文字幕| 男女视频在线观看| 亚洲精品一线二线三线无人区| 日本中文字幕免费| 亚洲欧美日韩在线不卡| 97在线观看免费视频| 99视频国产精品| 日本黄色一级网站| 麻豆成人91精品二区三区| 精品99在线视频| 在线不卡亚洲| 真人做人试看60分钟免费| aiss精品大尺度系列| 成人精品在线观看| 电影在线观看一区二区| 538国产精品视频一区二区| 色呦呦在线视频| 亚洲欧美中文字幕| 91亚洲国产成人精品一区| 91成人免费电影| 日日骚av一区二区| 亚洲精品视频一区| 青青青视频在线免费观看| 国产精品911| 中文字幕成人免费视频| 亚洲大片在线| 日韩一级片免费视频| 欧美韩国一区| 国内外成人激情免费视频| 999国产精品| 一区高清视频| 97色伦图片97综合影院| 亚洲欧美日产图| 日韩一区二区三区免费播放| 奇米视频888战线精品播放| 免费精品一区二区三区在线观看| 欧美一级高清免费| 亚洲电影视频在线| 免费av在线一区| av在线麻豆| 久久国产精品久久国产精品| 久久久资源网| 亚洲网站在线观看| 色影院视频在线| 久久久国产成人精品| 国产成人l区| 欧美激情一区二区三级高清视频| freemovies性欧美| 日韩在线不卡视频| 国产欧美久久久久久久久| 欧美精品免费播放| 欧美理论电影| 欧美性受xxx| 女同一区二区免费aⅴ| 国内精品久久久久久久久| 午夜激情电影在线播放| 国产精品狠色婷| 99亚洲男女激情在线观看| 超碰在线97av| 亚洲成a人片77777在线播放| 少妇特黄a一区二区三区| 国产精品久久久乱弄| 精品人妻大屁股白浆无码| 国产视频一区免费看| 久久久国产欧美| 久久黄色影院| 亚洲理论中文字幕| 不卡视频在线看| 中文字幕有码在线播放| ...中文天堂在线一区| 久久高清免费视频| 欧美视频日韩视频在线观看| 国产裸体无遮挡| 91麻豆精品国产91久久久久久 | 亚洲人www| 免费看a级黄色片| 国产又黄又大久久| www.污网站| 99久久精品一区| 嘿嘿视频在线观看| 亚洲最快最全在线视频| 免费观看日批视频| 日韩一区二区三区高清免费看看| 国产精品久久久久久久久毛片 | 亚洲在线观看av| 精品免费视频.| 亚洲麻豆精品| 911国产网站尤物在线观看| 精品美女一区| 久久久综合亚洲91久久98| 亚洲午夜精品一区 二区 三区| www.-级毛片线天内射视视| 亚洲毛片av| 国产三级精品三级在线| 精品无人区卡一卡二卡三乱码免费卡| 日本黄色福利视频| 国内精品在线播放| 永久免费成人代码| 亚洲不卡一区二区三区| 11024精品一区二区三区日韩| 91精品国产手机| 久草福利在线| 午夜精品久久久久久久男人的天堂 | 欧美黄色成人网| 久久福利在线| 欧美综合激情| 亚洲视频1区| 奇米777第四色| 亚洲人成影院在线观看| 一区二区视频网站| 国产丝袜一区二区三区免费视频| 国产高清一级毛片在线不卡| 欧美精品18videos性欧| 乡村艳史在线观看| 国产精品日韩一区二区| 自拍欧美一区| 免费 成 人 黄 色| 国产成人亚洲综合a∨婷婷图片| 中文人妻一区二区三区| 亚洲自拍偷拍欧美| 精品国产av鲁一鲁一区| www.xxxx精品| 久久精品xxxxx| 亚洲国产一区二区在线| 日产国产高清一区二区三区| av在线网站观看| 欧美视频13p| 三级在线播放| 欧美综合国产精品久久丁香| 青草久久视频| 无码精品a∨在线观看中文| 麻豆精品国产传媒mv男同| 韩国三级hd中文字幕| 欧美日韩在线免费| 日韩资源在线| 国产99久久精品一区二区 夜夜躁日日躁 | 欧美久久成人| 香蕉网在线视频| 亚洲精品免费电影| www.爱爱.com| 久久久久久国产免费| 国产主播性色av福利精品一区| 亚洲欧美日韩综合一区| 美国三级日本三级久久99| 中文字幕免费在线播放| 亚洲3atv精品一区二区三区| 熟妇人妻av无码一区二区三区 | 大香伊人久久| 精品日韩欧美| 日韩精品免费专区| 国产精品1区2区3区4区| 日韩欧美亚洲范冰冰与中字| 九一国产在线| 欧美一区二区影院| 国内精品久久久久久久影视简单 | 1卡2卡3卡精品视频| 欧美一区不卡| 久久人人妻人人人人妻性色av| 亚洲综合一区二区| 深夜福利视频网站| 国产成人精品视频在线| 欧美重口另类| 我看黄色一级片| 久久久久久久久久久电影| 久草热在线观看| 亚洲一区二区国产| 伊人久久大香线蕉综合影院首页| 日本视频一区在线观看| 免费欧美在线| 成人信息集中地| 精品99999| 91成人抖音| 欧洲精品在线播放| 久久精品欧美一区二区三区不卡| 日韩av在线天堂| 伊人伊成久久人综合网小说| 久久在线观看| 国产资源第一页| 国产原创一区二区| av大片免费观看| 精品国产拍在线观看| 95精品视频| 久久天天东北熟女毛茸茸| 久久综合久久综合久久| 国产国语亲子伦亲子| 日韩美女在线观看| 精品动漫3d一区二区三区免费| 欧美熟妇精品一区二区蜜桃视频|