精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

免费毛片b在线观看| 国产一区二区三区在线观看| 黄色成人美女网站| 偷窥少妇高潮呻吟av久久免费| 国产精品乱码一区二区三区| 精品国产午夜福利| 久久婷婷蜜乳一本欲蜜臀| 日韩欧美国产一二三区| 欧美aⅴ在线观看| 日本免费视频在线观看| 高清国产一区二区| 国产精品久久久久久久久久久久| 欧美 日韩 国产 一区二区三区| 成人精品动漫一区二区三区| 在线精品国精品国产尤物884a | 日韩精品一区二区久久| 日韩视频免费观看高清完整版 | 99热99re6国产在线播放| 久久久噜噜噜久久人人看| 成人黄色在线观看| 欧美性猛交bbbbb精品| 欧洲美女日日| 欧美精品一区男女天堂| 天天干天天操天天做| 免费高潮视频95在线观看网站| 亚洲日本青草视频在线怡红院| 欧美aaaaa喷水| 精品国产亚洲AV| 麻豆成人久久精品二区三区红| 97精品久久久中文字幕免费| 51精品免费网站| 国产一区二区电影在线观看| 精品国产区一区| 日韩a一级欧美一级| 欧美影视资讯| 欧美视频在线视频| 特大黑人娇小亚洲女mp4| caoporn国产精品免费视频| 成人毛片在线观看| 91性高湖久久久久久久久_久久99| 黄色网址中文字幕| 国产精品久久久久久久免费软件| 欧美日本啪啪无遮挡网站| 四虎地址8848| 久久国产小视频| 国产亚洲欧美日韩美女| 久久久久9999| 美女午夜精品| 亚洲福利视频久久| 亚洲视频 中文字幕| 日韩一区二区三区精品视频第3页 日韩一区二区三区精品 | 日日骚欧美日韩| 91大神福利视频在线| 日本五十路女优| 伊人天天综合| 久久久久久久国产精品| 久久精品人妻一区二区三区| 欧美91大片| 欧美日本亚洲视频| xxxx 国产| 日韩一级网站| 欧美一区视频在线| 日韩精品欧美在线| 天天干天天操天天做| 电影久久久久久| 在线观看一区日韩| 91热这里只有精品| 国产成人毛片| 911精品国产一区二区在线| 亚洲免费av一区| 99久久99九九99九九九| 69精品人人人人| 毛片毛片毛片毛片毛| 一区二区三区四区精品视频| 日韩欧美国产综合| 精品一区二区三区四区五区六区| 国产精品99久久免费观看| 亚洲精品美女在线| 黄瓜视频污在线观看| 欧美日韩精品一区二区视频| 色噜噜狠狠狠综合曰曰曰88av| 国产三级aaa| 亚洲乱码精品| 午夜精品视频网站| 无码人妻丰满熟妇精品区| 老司机免费视频一区二区三区| 91亚洲永久免费精品| 亚洲国产成人在线观看| www欧美成人18+| 亚洲精品一区二区毛豆| 日本一级理论片在线大全| 亚洲成人自拍偷拍| 日本中文字幕高清| 日韩成人视屏| 亚洲欧洲日产国产网站| 国产3级在线观看| 亚洲国产综合在线看不卡| 日产精品久久久一区二区福利| 91久久精品无码一区二区| 东方aⅴ免费观看久久av| 日韩免费三级| 人妖欧美1区| 精品免费在线视频| а 天堂 在线| 亚洲第一福利专区| 蜜月aⅴ免费一区二区三区| www日韩精品| 精品一区二区三区欧美| 快播亚洲色图| av毛片在线免费看| 在线观看成人小视频| 绯色av蜜臀vs少妇| 日韩精品免费一区二区在线观看 | 国产婷婷视频在线| 欧美午夜激情小视频| 天天av天天操| 第一会所亚洲原创| 97视频在线观看免费| 国产巨乳在线观看| 国产亚洲成年网址在线观看| 男人天堂新网址| 精品九九久久| 精品无码久久久久久国产| 精品国产精品国产精品| 日本欧美在线观看| 精品日韩电影| 国产深夜视频在线观看| 欧美二区三区91| 天天操天天干天天操天天干| 国产情侣久久| 高清国产一区| 91麻豆国产福利在线观看宅福利| 在线观看国产日韩| 成人午夜剧场视频网站| 亚洲美女一区| 国产精品大全| 国产婷婷视频在线| 欧美精品在线观看一区二区| xxxx日本黄色| 久久久噜噜噜久久狠狠50岁| 精品国产一区二区三区免费| 丁香花在线电影小说观看| 91精品国产aⅴ一区二区| 林心如三级全黄裸体| 日韩av网站免费在线| 欧美一区二区视频17c| 在线观看的黄色| 亚洲精品久久在线| 日韩免费一级片| 成人av片在线观看| 搞av.com| 精品av导航| 97av在线视频| 欧洲亚洲在线| 色婷婷久久99综合精品jk白丝| 中文字幕一区二区人妻在线不卡| 99视频精品| 免费日韩av电影| 唐人社导航福利精品| 亚洲欧美在线一区| 欧美男人天堂网| 国产精品久久影院| 亚洲欧美aaa| 91成人精品视频| 97在线电影| 精精国产xxxx视频在线野外| 国产网站欧美日韩免费精品在线观看| av大片在线免费观看| 91色.com| 污片在线免费看| 亚洲欧洲日韩| 国产乱码精品一区二区三区不卡| 国产伦久视频在线观看| 日韩乱码在线视频| 国产精品高清无码| 亚洲欧美日韩中文字幕一区二区三区| 下面一进一出好爽视频| 亚洲国产日本| 日韩影院一区| 午夜精品在线| 欧美综合国产精品久久丁香| 成人在线免费视频| 欧美一区二区三级| 成人免费区一区二区三区| 国产蜜臀97一区二区三区| 午夜一区二区视频| 亚洲成人资源| 色综合久久88色综合天天提莫| 四虎国产精品免费久久| 国外成人在线视频| 国产高清视频在线播放| 日韩一区二区在线看| 亚洲s码欧洲m码国产av| 亚洲日本在线看| 我和岳m愉情xxxⅹ视频| 狠狠网亚洲精品| 国产极品尤物在线| 999久久久免费精品国产| 国产女主播一区二区三区| 日本综合视频| 国内精品小视频在线观看| 波多野结衣一区二区| 精品国产一二三区| 亚洲香蕉在线视频| 精品国产电影一区| 亚洲色偷偷综合亚洲av伊人| 9久草视频在线视频精品| 可以看污的网站| 国产精品日韩久久久| 国产91视频一区| 欧美三级情趣内衣| 韩国成人av| 国产欧美88| 国产精品xxx视频| 成年网站在线视频网站| 久久久国产91| 国产精品ⅴa有声小说| 欧美精品一区视频| 国产成年妇视频| 精品视频在线免费看| av黄色在线看| 亚洲一区二区三区四区不卡| 国产性生活大片| 国产欧美视频一区二区三区| www.88av| 成人亚洲一区二区一| 亚洲高清视频免费| 麻豆精品国产91久久久久久| 日韩精品视频一区二区在线观看| 韩国亚洲精品| 日本一级黄视频| 2023国产精品久久久精品双| 亚洲精品免费在线看| 国产日产精品_国产精品毛片| 国产一区福利视频| av成人综合| 51国产成人精品午夜福中文下载| 欧美性生活一级| 国产精品一区二区三| 丝袜美腿一区| 国产精品第10页| 桃色一区二区| 日本视频久久久| 欧美成人a交片免费看| 4k岛国日韩精品**专区| 日本在线啊啊| 26uuu另类亚洲欧美日本一 | 国产精品久久久久久久久男 | 欧美熟妇精品一区二区| 国产一区二区毛片| 日本高清免费在线视频| 韩国av一区二区| 久久婷婷中文字幕| 国产精品亚洲一区二区三区在线 | 成人免费av资源| 超碰男人的天堂| 91麻豆6部合集magnet| 国产黄色三级网站| 91蜜桃视频在线| 手机免费看av| 中文字幕巨乱亚洲| 国产又色又爽又高潮免费 | 久久综合色综合| 亚洲成精国产精品女| 亚欧视频在线观看| 一本久道久久综合中文字幕| 中文字幕二区三区| 欧美精选午夜久久久乱码6080| www.激情五月| 亚洲国产天堂久久国产91| 日本福利片在线| 中文字幕亚洲字幕| 18网站在线观看| 97久久久久久| 国产91精品在线| 91福利视频导航| 久久亚州av| 亚洲v国产v在线观看| 亚洲色图88| 99精品人妻少妇一区二区| 日韩电影免费在线观看网站| 亚洲综合123| av电影天堂一区二区在线| 五月天精品视频| 亚洲色图都市小说| 日韩大片免费在线观看| 欧美怡红院视频| 精品黑人一区二区三区国语馆| 日韩高清免费在线| 蜜芽在线免费观看| 久久久亚洲影院你懂的| 日韩欧美精品一区二区综合视频| 亚洲综合中文字幕在线| 蜜桃视频欧美| 中文字幕第50页| 老鸭窝亚洲一区二区三区| www.国产福利| 91免费看片在线观看| 亚洲精品卡一卡二| 欧美丝袜一区二区三区| 性欧美18一19性猛交| 亚洲天堂av在线免费观看| 日韩少妇视频| 国产精品专区h在线观看| 91欧美极品| 一区二区三区四区欧美| 国产亚洲成人一区| 中文字幕日韩久久| 日本一区二区三区视频视频| 久久午夜无码鲁丝片午夜精品| 欧美亚州韩日在线看免费版国语版| 亚洲h视频在线观看| 色av吧综合网| 成人影院网站| 国产精品毛片va一区二区三区| 91综合久久| 久久久久久久久久福利| 成人av资源在线观看| 久久人妻无码aⅴ毛片a片app| 懂色av影视一区二区三区| 性生交大片免费看女人按摩| 最新日韩中文字幕| 成人日韩在线| 美乳视频一区二区| 亚洲三级免费| 国产ts在线观看| 亚洲免费成人av| 在线观看免费黄色小视频| 亚洲人在线视频| 亚洲最新无码中文字幕久久| 国产99午夜精品一区二区三区| 91精品观看| 色www免费视频| 国产精品久久久久久亚洲伦| 成年人视频免费| 亚洲欧美在线x视频| 亚洲福利影院| 久久久久高清| 亚洲一区免费| 精品黑人一区二区三区观看时间| 亚洲成人av免费| 色网站免费观看| 97国产精品人人爽人人做| 国产精品tv| 成人在线观看你懂的| 成人免费视频app| 国产成人精品av久久| 亚洲福利视频二区| 国产网站在线| 免费观看成人高| 久久久久国产精品一区三寸| 一区二区黄色片| 欧美亚洲一区二区在线| 成人三级黄色免费网站| 国产精品美女免费看| 日韩精品水蜜桃| 中文字幕在线视频一区二区| 亚洲欧美另类小说| 性一交一乱一透一a级| 久久久久国色av免费观看性色 | 欧美在线一区二区三区四区| 水蜜桃久久夜色精品一区的特点| www在线观看免费视频| 欧美性受xxxx| 免费黄色在线看| 97人摸人人澡人人人超一碰| 99伊人成综合| 天堂久久精品忘忧草| 欧美日韩视频在线第一区| а√中文在线8| 国产精品美女xx| 久久视频一区| 黄色录像免费观看| 精品国产电影一区二区| 成人影院网站| 91免费视频黄| av资源站一区| 国产一级片一区二区| 超碰日本道色综合久久综合 | 日本一区视频在线播放| 蜜桃av一区二区| 久草国产在线观看| 精品在线欧美视频| 激情亚洲小说| www.av蜜桃| 欧美国产日韩亚洲一区| 99久久久久久久| 欧美一级大片在线观看| 国产在线精品一区二区三区》| 天堂久久一区二区三区| 男人操女人的视频网站| 日韩久久免费视频| 91精品国产一区二区在线观看| 免费观看国产精品视频| 亚洲国产精品国自产拍av| 成 人片 黄 色 大 片| 国产精品jizz在线观看麻豆| 午夜久久美女| 一级片久久久久| 亚洲精品电影久久久|