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

面試官:我不想聽單例、工廠了,跟我說說裝飾器模式吧!

開發(fā) 前端
如果數(shù)學和繪畫課程又新增了需求,需要額外展示對應(yīng)的輔修資料,但英語課程則不需要展示這類信息,那按照繼承的方式應(yīng)該如何實現(xiàn)呢?

我草草地估算了一下,基本上80% Java 候選人的簡歷上,在專業(yè)技能欄上都會寫上這么一條:

熟悉常用的GOF設(shè)計模式,可在實際業(yè)務(wù)場景中進行合理運用;

如果面試官恰好看到了這條專業(yè)技能,問道:“那你說一下,都熟悉并使用過哪些設(shè)計模式呢?”

然后,絕大多數(shù)候選人都會回答說:“嗯,熟悉單例模式和工廠模式?!?/span>

面試官接著問道:“還有其他的嗎?”

候選人一般會說:“嗯,還有代理模式、策略模式這些吧,其實平時用到的也不是很多?!?/span>

此時,若面試官繼續(xù)追問:“裝飾器模式有沒有了解過?”

候選人往往會發(fā)愣一下,然后說:“嗯,這個設(shè)計模式也聽過,但沒太深入了解。”

嗯,本文我們以真實場景帶入的方式來講解一下,有用且有趣的“裝飾器”模式。

接下來話不多說,Show me the case。

業(yè)務(wù)背景

某大型在線教育學習平臺,其學生端最重要的功能就是展示學生的課程列表,學生可點擊課程列表中的某個課程進教室上課,還可以查看這節(jié)課對應(yīng)的課件、課前預習和課后作業(yè)等。

如下圖所示:

圖片

當然,真實的業(yè)務(wù)場景還是要復雜很多的,比如:英語課程的 PC 端按照上圖中的展示方式即可,而英語課程 iPad 端的產(chǎn)品經(jīng)理,則希望在已經(jīng)上過的課程中,加上老師給學生的打分。

數(shù)學課程與英語課程也有不同的地方,課程卡片上需要展示教師的標簽,如:名師、活躍、名校畢業(yè)、教齡長、好評多等;

最近新推出的繪畫課程,不但需要在課程卡片上展示教師的標簽,而且為了鼓勵學生更多地上課學習,會在課程卡片上展示一個完課獎品。

當然,我僅僅是舉個例子,實際的課表展示邏輯會復雜很多。

代碼質(zhì)量問題

說說目前這塊的代碼實現(xiàn)情況。

最開始的時候,公司只有英語課程,且 PC 端和 iPad 端的課表展示邏輯是一樣的。

代碼demo如下:

public class Curriculum {


    public void query(int studentID) {
    
        System.out.println("展示課表");
        System.out.println("展示對應(yīng)的課前預習");
        System.out.println("展示對應(yīng)的課后作業(yè)");
        System.out.println("展示對應(yīng)的課件");
    }
}

后來,英語課程的 PC 端和 iPad 端的課表展示邏輯不一樣了,iPad 端的課表展示需要加上老師給學生的打分,代碼實現(xiàn)如下:

public class Curriculum {


    public void query(int studentID, int origin) {


        System.out.println("展示課表");
        System.out.println("展示對應(yīng)的課前預習");
        System.out.println("展示對應(yīng)的課后作業(yè)");
        System.out.println("展示對應(yīng)的課件");


        //英語課程iPad端
        if(origin == 1){
            System.out.println("展示對應(yīng)的學生評分");
        }
    }
}

再后來,又增加了需要展示老師標簽的數(shù)學課程,以及增加老師標簽和完課獎品的繪畫課程,都在一個類中以 if else 分支判斷的方式來實現(xiàn),代碼的可讀性和可維護性就太差了。

于是,負責維護這塊業(yè)務(wù)代碼的工程師干脆一刀切,直接寫成了四套代碼。

英語課程PC端:

public class EnglishPCCurriculum {


    public List query(int studentID) {
      
        System.out.println("展示課表");
        System.out.println("展示對應(yīng)的課前預習");
        System.out.println("展示對應(yīng)的課后作業(yè)");
        System.out.println("展示對應(yīng)的課件");
    }
}

英語課程iPad端:

public class EnglishIPadCurriculum {


    public void query(int studentID) {
    
        System.out.println("展示課表");
        System.out.println("展示對應(yīng)的課前預習");
        System.out.println("展示對應(yīng)的課后作業(yè)");
        System.out.println("展示對應(yīng)的課件");
        
        System.out.println("展示對應(yīng)的學生評分");
    }
}

數(shù)學課程:

public class MathCurriculum {


    public void query(int studentID) {
    
        System.out.println("展示課表");
        System.out.println("展示對應(yīng)的課前預習");
        System.out.println("展示對應(yīng)的課后作業(yè)");
        System.out.println("展示對應(yīng)的課件");
        
        System.out.println("展示對應(yīng)的老師標簽");
    }
}

繪畫課程:

public class DrawCurriculum {


     public void query(int studentID) {
     
        System.out.println("展示課表");
        System.out.println("展示對應(yīng)的課前預習");
        System.out.println("展示對應(yīng)的課后作業(yè)");
        System.out.println("展示對應(yīng)的課件");
        
        System.out.println("展示對應(yīng)的老師標簽");
        System.out.println("展示對應(yīng)的完課獎品");
      }
}

劃重點,代碼按照上述方式實現(xiàn),有何問題?

在《重構(gòu)—改善既有代碼的設(shè)計》一書中,有兩種非常常見的Bad Smell(糟糕的代碼),叫做 “過長的方法” 和 “重復的代碼” 。

其實問題還是挺大的,我們上面的代碼只是實現(xiàn)了一個demo而已,如果是真實的代碼,這個查詢課表的query()方法實現(xiàn)了太多的業(yè)務(wù)邏輯,一定命中了“過長的方法”這個Bad Semll。

而且,上面這四個類中的query()方法,在實現(xiàn)展示課表、作業(yè)、預習、課件業(yè)務(wù)無邏輯的時候,也命中了“重復的代碼”這個Bad Semll。

除此之外,這段代碼還命中了一種叫做 “發(fā)散式變化” 的 Bad Smell。

發(fā)散式變化的定義是,一個類被錨定了多個變化,當這些變化中的任意一個發(fā)生時,就必須對類進行修改。這說明該類承擔的職責過多,不符合單一職責的設(shè)計原則。

而上面這四個類的query()方法中,從頭到尾實現(xiàn)了整個課表展示的邏輯,只要課表、作業(yè)、預習、課件等任意邏輯發(fā)生變化都需要對這個類進行修改,確實承擔的職責過多了。

接下來,我們看看如何這塊代碼進行重構(gòu),使其實現(xiàn)方式更具可維護性和可擴展性。

裝飾器模式

裝飾器模式(Decorator Pattern),在不改變一個現(xiàn)有對象結(jié)構(gòu)的情況下,為其動態(tài)地增加一些額外的職責。

裝飾器模式的優(yōu)點在于:

  1. 可動態(tài)地為現(xiàn)有對象增加額外的職責,無需改動原來的代碼,具備更好的靈活性和可擴展性,且符合開閉原則。
  2. 每種額外的職責都被實現(xiàn)為一個單獨且通用的裝飾器,符合單一職責,解決了“過長的方法”、“重復的代碼”和“發(fā)散式變化”等Bad Smell。

其類結(jié)構(gòu)圖如下:

圖片圖片

Component:定義了被裝飾對象和裝飾器都需要實現(xiàn)的接口。

ConcreteComponent:被裝飾對象,需要提供業(yè)務(wù)邏輯的核心功能。

Decorator:抽象裝飾器,可通過其子類進行額外功能職責的擴展。

ConcreteDecorator:具體裝飾類,對被裝飾對象進行額外功能職責的擴展。

代碼重構(gòu)優(yōu)化

接下來我們通過裝飾器模式將代碼進行重構(gòu)優(yōu)化。

Curriculum接口:

public interface Curriculum {


    public void query(int studentID);
}

Curriculum具體實現(xiàn):

public class ConcreteCurriculum implements Curriculum {


    public void query(int studentID) {


        System.out.println("展示課表");
        System.out.println("展示對應(yīng)的課前預習");
        System.out.println("展示對應(yīng)的課后作業(yè)");
        System.out.println("展示對應(yīng)的課件");
    }
}

Curriculum的抽象裝飾器:

public abstract class CurriculumDecorator implements Curriculum {
    protected Curriculum curriculum;


    public CurriculumDecorator(Curriculum curriculum){
        this.curriculum = curriculum;
    }


    public void query(int studentID){
        curriculum.query(studentID);
    }
}

Curriculum的評分裝飾器:

public class ScoreDecorator extends CurriculumDecorator{


    public ScoreDecorator(Curriculum curriculum) {
        super(curriculum);
    }


    @Override
    public void query(int studentID) {
        curriculum.query(studentID);
        System.out.println("展示對應(yīng)的學生評分");


    }
}

Curriculum的老師標簽裝飾器:

public class LabelDecorator extends CurriculumDecorator{


    public LabelDecorator(Curriculum curriculum) {
        super(curriculum);
    }


    @Override
    public void query(int studentID) {
        curriculum.query(studentID);
        System.out.println("展示對應(yīng)的老師標簽");


    }
}

Curriculum的獎品裝飾器:

public class GiftDecorator extends CurriculumDecorator{


    public GiftDecorator(Curriculum curriculum) {
        super(curriculum);
    }


    @Override
    public void query(int studentID) {
        curriculum.query(studentID);
        System.out.println("展示對應(yīng)的完課獎品");


    }
}

Demo:

public class Demo {
    public static void main(String[] args) {
        Curriculum curriculum = new ConcreteCurriculum();
        CurriculumDecorator scoreDecorator = new ScoreDecorator(new ConcreteCurriculum());
        CurriculumDecorator labelDecorator = new LabelDecorator(new ConcreteCurriculum());
        CurriculumDecorator giftLabelDecorator = new GiftDecorator(labelDecorator);




        System.out.println("英語PC端課表展示");
        curriculum.query(123);
        System.out.println();


        System.out.println("英語iPad端課表展示");
        scoreDecorator.query(123);
        System.out.println();


        System.out.println("數(shù)學課表展示");
        labelDecorator.query(123);
        System.out.println();


        System.out.println("繪畫課表展示");
        giftLabelDecorator.query(123);


    }
}

執(zhí)行結(jié)果:

英語PC端課表展示
展示課表
展示對應(yīng)的課前預習
展示對應(yīng)的課后作業(yè)
展示對應(yīng)的課件


英語iPad端課表展示
展示課表
展示對應(yīng)的課前預習
展示對應(yīng)的課后作業(yè)
展示對應(yīng)的課件
展示對應(yīng)的學生評分


數(shù)學課表展示
展示課表
展示對應(yīng)的課前預習
展示對應(yīng)的課后作業(yè)
展示對應(yīng)的課件
展示對應(yīng)的老師標簽


繪畫課表展示
展示課表
展示對應(yīng)的課前預習
展示對應(yīng)的課后作業(yè)
展示對應(yīng)的課件
展示對應(yīng)的老師標簽
展示對應(yīng)的完課獎品

至此,展示課表業(yè)務(wù)場景的代碼改造完畢。

有的同學可能會問,為什么不通過繼承的方式進行實現(xiàn)呢?

其原因在于,繼承的方式不如這種動態(tài)組合的方式靈活,也很難實現(xiàn)這種細粒度的代碼復用。

舉個例子:如果數(shù)學和繪畫課程又新增了需求,需要額外展示對應(yīng)的輔修資料,但英語課程則不需要展示這類信息,那按照繼承的方式應(yīng)該如何實現(xiàn)呢?


責任編輯:武曉燕 來源: 托尼學長
相關(guān)推薦

2021-11-02 22:04:58

模式

2020-08-03 07:38:12

單例模式

2021-11-03 14:10:28

工廠模式場景

2020-07-20 07:48:53

單例模式

2020-07-02 07:52:11

RedisHash映射

2021-02-16 10:53:19

單例模式面試

2021-09-10 06:50:03

TypeScript裝飾器應(yīng)用

2021-05-28 11:18:50

MySQLbin logredo log

2024-08-22 10:39:50

@Async注解代理

2024-03-05 10:33:39

AOPSpring編程

2024-05-30 08:04:20

Netty核心組件架構(gòu)

2024-03-06 13:19:19

工廠模式Python函數(shù)

2025-03-05 08:04:31

2024-02-29 16:49:20

volatileJava并發(fā)編程

2024-11-19 15:13:02

2024-08-29 16:30:27

2023-12-27 18:16:39

MVCC隔離級別幻讀

2024-08-12 17:36:54

2025-04-16 00:00:01

JWT客戶端存儲加密令

2025-04-08 00:00:00

@AsyncSpring異步
點贊
收藏

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

中文欧美日本在线资源| 色一情一乱一乱一91av| 成人综合色站| 免费黄色网址在线| 日韩伦理视频| 精品国产乱码久久久久久1区2区 | 日本黄色片在线播放| 日韩免费小视频| 亚洲一区精品在线| 亚洲草草视频| 日韩一卡二卡在线| 久久精品久久99精品久久| 久久欧美在线电影| 亚洲少妇xxx| 亚洲动漫在线观看| 日韩欧美亚洲国产精品字幕久久久| 国内外成人免费激情视频| 国产二区三区在线| 久久久久久夜精品精品免费| 91高跟黑色丝袜呻吟在线观看| 日本高清不卡码| 国产一区清纯| 欧美成人精品xxx| 精品人妻一区二区三区蜜桃视频| 粉嫩一区二区三区四区公司1| 欧美日韩一区二区不卡| 97av视频在线观看| 丰满的护士2在线观看高清| 国产精品久久777777| 欧美成人在线免费观看| 亚洲第一天堂影院| 精品一区二区久久| 国产精品揄拍500视频| www.日本精品| 99精品视频免费观看视频| 欧美精品在线网站| 成人在线观看免费完整| 日韩av密桃| 一区二区三区视频在线| 日韩精品卡通动漫网站| 任你躁在线精品免费| 精品国产sm最大网站| 国产又粗又猛又爽又黄| 精品一区二区三区在线观看视频| 欧美在线播放高清精品| 日韩中文字幕免费在线| 黄色成人免费网| 色偷偷成人一区二区三区91| 国产肥臀一区二区福利视频| 国产亚洲成av人片在线观看| 香蕉成人伊视频在线观看| a级片一区二区| 亚洲小说区图片区都市| 亚洲伦理在线精品| 日韩国产小视频| 羞羞视频在线观看免费| 亚洲午夜久久久久久久久久久| 日韩成人午夜影院| 女同一区二区免费aⅴ| 亚洲一区二区三区不卡国产欧美| 久久免费一级片| 欧洲精品二区| 午夜私人影院久久久久| 狠狠97人人婷婷五月| 厕沟全景美女厕沟精品| 色婷婷av一区二区| 黄色手机在线视频| 99视频有精品高清视频| 日韩欧美一区二区免费| 天天躁日日躁狠狠躁av麻豆男男| 精品欠久久久中文字幕加勒比| 日韩av网址在线观看| 玖玖爱在线观看| 大片网站久久| 欧美成人全部免费| 青青国产在线观看| 天堂影院一区二区| 成人精品久久久| 欧美77777| 久久先锋影音av鲁色资源网| 午夜精品一区二区三区四区| yellow91字幕网在线| 亚洲第一狼人社区| 国产精品人人妻人人爽人人牛| 一区二区三区| 亚洲国产精彩中文乱码av| 欧美成人国产精品一区二区| 亚洲欧洲美洲一区二区三区| 国内久久久精品| 精品一区二三区| 国产精品一区二区三区99| 精品欧美一区二区久久久伦| 午夜精品一区| 午夜视黄欧洲亚洲| 91香蕉视频导航| xvideos.蜜桃一区二区| 国产亚洲精品久久久| 69av视频在线| 久久永久免费| 99在线观看| av影片在线看| 精品国产999| 中文字幕日韩久久| 欧美人与拘性视交免费看| 欧美刺激性大交免费视频| 欧美日韩综合一区二区三区| 国产伦精一区二区三区| 日本中文不卡| 国内激情视频在线观看| 欧美一级国产精品| 波多野在线播放| 在线综合视频| 99在线首页视频| 午夜在线观看视频| 日韩欧美精品中文字幕| 五月天丁香社区| 99热在线成人| 国产精品揄拍500视频| 欧美日韩影视| 香蕉乱码成人久久天堂爱免费| 国产无色aaa| 国产99久久精品一区二区300| 欧美极品在线播放| 精品人妻久久久久一区二区三区 | 蜜桃一区二区三区四区| 老司机精品福利在线观看| 青青青国内视频在线观看软件| 欧美视频一区二区三区四区| 中文精品在线观看| 翔田千里一区二区| 精品一区2区三区| 波多一区二区| 亚洲成年人影院在线| 青青草原免费观看| 国产一区 二区 三区一级| 一区二区三区免费看| 超薄肉色丝袜脚交一区二区| 亚洲精品小视频在线观看| 国产第一页在线播放| 国产不卡高清在线观看视频| 超碰超碰超碰超碰超碰| 欧美影院视频| 欧美精品在线播放| 亚洲美女综合网| 亚洲综合色视频| 精品人妻人人做人人爽夜夜爽| 亚洲天天综合| 91在线在线观看| 欧美大胆的人体xxxx| 精品国产乱码久久久久久蜜臀| 国产一级做a爱免费视频| 成人一区二区三区在线观看| 国产男女免费视频| 狼人天天伊人久久| 国产suv精品一区二区三区88区| 三级视频在线| 欧美性大战久久久| 三级黄色片在线观看| 国产一区二区中文字幕| 国产日产欧美一区二区| 日韩中文字幕视频网| 久久久综合免费视频| 神马久久高清| 欧美亚洲国产一卡| 一区二区国产精品精华液| 国产成人精品免费网站| 男人和女人啪啪网站| 国产成人一区二区三区影院| 国产精品亚洲自拍| 欧美人与禽猛交乱配| 国产视频精品xxxx| 亚洲视屏在线观看| 亚洲精品中文字幕乱码三区| 99久久人妻精品免费二区| 美女久久网站| 国产日本欧美在线| 国产成人澳门| 国产精品久久久久高潮| 麻豆av在线免费看| 亚洲国产精品va在线看黑人动漫| 精品国产xxx| 亚洲精品高清视频在线观看| 亚洲第九十七页| 久久国产人妖系列| 日本免费a视频| 精品理论电影在线| 91精品久久久久久蜜桃| 欧美最新精品| 欧美劲爆第一页| 国产精品毛片一区二区三区四区| 日韩亚洲欧美高清| 无码人妻精品一区二| 一区二区三区在线免费播放| 青青草视频成人| 国模一区二区三区白浆| 成人在线免费在线观看| 婷婷精品进入| 色涩成人影视在线播放| 999久久久精品一区二区| 国产精品看片资源| 女人让男人操自己视频在线观看 | 国产曰批免费观看久久久| 久久精品国产sm调教网站演员| 欧美a级片视频| 欧美激情论坛| 国产成人精品亚洲线观看| 国产精品亚洲网站| 欧美日韩精品免费观看视完整| 久久影院中文字幕| av免费观看一区二区| 国产午夜精品久久久| 99热这里只有精品99| 精品视频一区 二区 三区| 日韩成人免费观看| 亚洲精品乱码久久久久久黑人| 丁香激情五月少妇| 99精品欧美一区二区三区综合在线| 中国黄色片一级| 久久一区视频| 欧美黄色一级片视频| 亚洲免费精品| 国内少妇毛片视频| 91成人看片| 一本色道久久99精品综合| 精品一区免费| 久久精品国产理论片免费| 草莓视频一区二区三区| 99r国产精品视频| 秋霞影院一区| 97人人模人人爽视频一区二区| 欧美jizz18| 成人av色在线观看| 国模私拍国内精品国内av| 国产精品国产自产拍高清av水多| 正在播放日韩精品| 欧美亚洲日本黄色| 亚洲精品88| 欧美在线欧美在线| 成人性生活av| 日韩av观看网址| 另类激情视频| 国产精品久久二区| 青青热久免费精品视频在线18| 国产精品h在线观看| 偷拍视频一区二区三区| 国产成人在线亚洲欧美| 日韩中文影院| 国产精品久久久久久久久免费| 国精产品一区一区三区四川| 国产精品777| 国产成人精品一区二区三区视频| 国产精品视频网站| 国产精品亚洲欧美一级在线| 亚洲精品免费网站| 免费一级欧美在线大片| 国产精品美女诱惑| 美国一区二区| 日韩福利影院| 亚洲a一区二区三区| www.欧美黄色| 99在线精品视频在线观看| 丰满人妻中伦妇伦精品app| 日本最新不卡在线| 91欧美一区二区三区| 国产成人免费视频网站 | 久久不见久久见国语| 人偷久久久久久久偷女厕| 成人黄色av| 免费的av在线| 亚洲少妇在线| 亚洲第一中文av| 丁香五精品蜜臀久久久久99网站| 性囗交免费视频观看| 国产视频在线观看一区二区三区| 欧美一区二区三区观看| 亚洲一区二区免费视频| 日本特级黄色片| 欧美日韩国产首页| 亚洲黄色在线播放| 国产亚洲激情视频在线| 国产一二三区在线观看| 97久久精品视频| 国产69精品久久久久9999人| 国产另类第一区| 欧美久久精品一级c片| 日韩精品免费一区| 麻豆精品91| xxxx视频在线观看| 久久久高清一区二区三区| 顶臀精品视频www| 欧美香蕉大胸在线视频观看| 国产口爆吞精一区二区| 日韩精品在线私人| 性欧美videoshd高清| 国产精品美女久久久久久免费| 欧美a级大片在线| 三级三级久久三级久久18| 亚洲第一毛片| 九九久久久久久| 国产日韩欧美麻豆| 日本a在线观看| 91精品在线观看入口| 免费动漫网站在线观看| 欧美高清videos高潮hd| 成人看片网站| 精品一卡二卡三卡四卡日本乱码 | 日韩精品视频久久| 国产精品99久久久久久似苏梦涵| 鲁丝一区二区三区| 午夜影院在线观看欧美| 国产手机精品视频| 最近中文字幕2019免费| 中文不卡1区2区3区| 99久久久久国产精品免费| 爽成人777777婷婷| 国产麻花豆剧传媒精品mv在线| 国产成人精品影视| 国产传媒免费在线观看| 在线免费观看不卡av| 欧美一区二区少妇| 97视频免费在线看| 亚洲综合色婷婷在线观看| 久久久一二三四| 美腿丝袜在线亚洲一区| 人妻一区二区视频| 一本色道久久综合精品竹菊| 人妻一区二区三区四区| 欧美人在线观看| 久久久精品区| 强开小嫩苞一区二区三区网站| 免费观看久久久4p| 中文字幕黄色网址| 欧美性猛交xxxx乱大交退制版| 免费在线黄色网址| 日韩av片永久免费网站| 天堂99x99es久久精品免费| 国产一区二区视频播放| 成人av在线观| 久久夜色精品亚洲| 欧美精品一区二区精品网| 2020国产在线| 国产欧美亚洲日本| 中文国产一区| 亚洲第一成人网站| 91成人在线精品| av电影在线观看| 国产免费观看久久黄| 国产精品福利在线观看播放| 99日在线视频| 一区二区在线免费观看| 蜜臀久久精品久久久久| 97精品免费视频| 最新精品国偷自产在线| 亚洲精品中文字幕无码蜜桃| 国产欧美日韩久久| 国产一区二区麻豆| 久99九色视频在线观看| 国产精品中文字幕制服诱惑| 欧美一区二区中文字幕| 国产日韩影视精品| 国产精品久久综合青草亚洲AV| 欧美高清电影在线看| 欧美一级一片| 中文字幕av专区| 亚洲一本大道在线| 欧美日韩国产中文字幕在线| 国产精品看片资源| 亚洲五月综合| 97人妻天天摸天天爽天天| 91成人免费在线视频| 老司机免费在线视频| 高清视频一区| 日日摸夜夜添夜夜添亚洲女人| 成人黄色短视频| 亚洲国内精品在线| 成人免费一区| 欧美国产视频一区| 久久久.com| 精品久久久久成人码免费动漫| 国内精品视频久久| 91亚洲人成网污www| 一级黄色免费视频| 欧美专区亚洲专区| 性欧美ⅴideo另类hd| 欧美一区二区三区在线免费观看 | 欧美日韩亚洲国产综合| 欧美videosex性欧美黑吊| 欧美福利一区二区三区| 极品美女销魂一区二区三区| 黄色一级片免费看| 日韩视频永久免费观看| 欧美韩一区二区| 久久久久久综合网| 欧美日韩在线观看视频| 国产黄色在线网站| 日韩精品电影网站| gogogo免费视频观看亚洲一| 亚洲综合视频在线播放| 45www国产精品网站| 重囗味另类老妇506070|