日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

一文徹底搞明白享元模式

來源: 責(zé)編: 時(shí)間:2024-05-17 17:47:09 230觀看
導(dǎo)讀本篇講解Java設(shè)計(jì)模式中的享元模式,分為定義、模式應(yīng)用前案例、結(jié)構(gòu)、模式應(yīng)用后案例、適用場景、模式可能存在的困惑和本質(zhì)探討7個(gè)部分。定義享元模式指的是運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。在新的分類方式

本篇講解Java設(shè)計(jì)模式中的享元模式,分為定義、模式應(yīng)用前案例、結(jié)構(gòu)、模式應(yīng)用后案例、適用場景、模式可能存在的困惑和本質(zhì)探討7個(gè)部分。SQE28資訊網(wǎng)——每日最新資訊28at.com

定義

享元模式指的是運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。SQE28資訊網(wǎng)——每日最新資訊28at.com

在新的分類方式中,享元模式被劃分至類的屬性相關(guān)類別中,其應(yīng)對(duì)類的不同對(duì)象可以共享內(nèi)部狀態(tài)(可共享的屬性)的要求。SQE28資訊網(wǎng)——每日最新資訊28at.com

SQE28資訊網(wǎng)——每日最新資訊28at.com

模式應(yīng)用前案例

在享元模式中,我們來看一個(gè)文本編輯器的案例。對(duì)于文本編輯器來說,可以包括添加文本、顯示文本、清空文本等操作。對(duì)于其中的文本,都有自身的文本樣式。SQE28資訊網(wǎng)——每日最新資訊28at.com

下面,先來看一下未使用享元模式的案例,代碼實(shí)現(xiàn)如下。SQE28資訊網(wǎng)——每日最新資訊28at.com

public class Text {//文本類private final String content;private final TextStyle style;public Text(String content, TextStyle style) {this.content = content;this.style = style;    }public void display() {        System.out.println("Text: " + this.content + ", Style: " + this.style);    }}public class TextStyle {//文本樣式類private final String font;private final int size;private final String color;public TextStyle(String font, int size, String color) {this.font = font;this.size = size;this.color = color;    }@Overridepublic String toString() {return "Font: "+ this.font +", Size: "+ this.size +", Color: "+ this.color;    }}public class TextEditor {// 文本編輯器類    List<Text> textList;public TextEditor(){this.textList =new ArrayList<>();    }// 添加文本到編輯器中public void addText(Text text){this.textList.add(text);    }// 顯示所有文本內(nèi)容和樣式信息public void displayAllTexts(){for(Text text : this.textList){            text.display();        }    }// 清空所有文本內(nèi)容public void clearAllTexts(){this.textList.clear();        System.out.println("All texts cleared.");    }}

調(diào)用方代碼如下。SQE28資訊網(wǎng)——每日最新資訊28at.com

public class Client {//調(diào)用方代碼public static void main(String[] args) {// 創(chuàng)建文本編輯器對(duì)象        TextEditor textEditor = new TextEditor();// 創(chuàng)建兩個(gè)相同樣式(Arial 12 Black)的文字片段并添加到編輯器中        TextStyle textStyle1 = new TextStyle("Arial", 12, "Black");        Text text1 = new Text("Hello World", textStyle1);        TextStyle textStyle2 = new TextStyle("Arial", 12, "Black");        Text text2 = new Text("Welcome to the world of programming!", textStyle2);        textEditor.addText(text1);        textEditor.addText(text2);// 顯示所有文本內(nèi)容和樣式信息        System.out.println("Displaying all texts:");        textEditor.displayAllTexts();// 清空所有文本內(nèi)容        System.out.println("/nClearing all texts:");        textEditor.clearAllTexts();    }}

在上述代碼中,文本樣式類是文本類中的屬性。對(duì)于每一個(gè)文本,即便文本樣式相同,代碼中也會(huì)創(chuàng)建新的文本樣式類。SQE28資訊網(wǎng)——每日最新資訊28at.com

直觀感覺上,就會(huì)覺得此處是否可以復(fù)用呢?對(duì)于此種場景,就適合使用享元模式來進(jìn)行處理。SQE28資訊網(wǎng)——每日最新資訊28at.com

結(jié)構(gòu)

SQE28資訊網(wǎng)——每日最新資訊28at.com

享元模式的示例代碼實(shí)現(xiàn)如下。SQE28資訊網(wǎng)——每日最新資訊28at.com

public interface Flyweight {void Operation(int extrinsicstate);}public class ConereteFlyweight implements Flyweight {@Overridepublic void Operation(int extrinsicstate) {        System.out.println("共享的具體Flyweight:" +extrinsicstate);    }}public class UnsharedConereteFlyweight implements Flyweight{@Overridepublic void Operation(int extrinsicstate) {        System.out.println("不共享的具體Flyweight:" +extrinsicstate);    }}public class FlyweightFactory {private static final Map<String, Flyweight> flyweights = new HashMap<>();public FlyweightFactory() {        flyweights.put("A", new ConereteFlyweight());        flyweights.put("B", new ConereteFlyweight());        flyweights.put("C", new ConereteFlyweight());    }public Flyweight getFlyweight(String key) {return flyweights.get(key);    }}public class Client {public static void main(String[] args) {int extrinsicstate = 1;       FlyweightFactory factory = new FlyweightFactory();       Flyweight fa = factory.getFlyweight("A");       fa.Operation(extrinsicstate);       Flyweight fb = factory.getFlyweight("B");       fb.Operation(extrinsicstate);       Flyweight fc = factory.getFlyweight("C");       fc.Operation(extrinsicstate);       UnsharedConereteFlyweight uf = new UnsharedConereteFlyweight();       uf.Operation(extrinsicstate);    }}

可以發(fā)現(xiàn),在享元模式下,先將類的屬性分成兩種類別,一類是多個(gè)對(duì)象可以共享的狀態(tài),另一類是多個(gè)對(duì)象私有的狀態(tài)。SQE28資訊網(wǎng)——每日最新資訊28at.com

然后,通過接口或繼承實(shí)現(xiàn)的一個(gè)類家族實(shí)現(xiàn)上述兩種類別,即圖中的Flyweight及具體實(shí)現(xiàn)類。SQE28資訊網(wǎng)——每日最新資訊28at.com

此外,提供一個(gè)FlyweightFactory支撐類,這個(gè)類的作用就是負(fù)責(zé)創(chuàng)建一些包含共享狀態(tài)的對(duì)象,然后緩存起來。SQE28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)調(diào)用方需要用到時(shí),就可以通過FlyweightFactory來獲取到共享的狀態(tài)。同時(shí),那些不能共享的狀態(tài)(或?qū)傩裕部梢酝ㄟ^UnsharedConcreteFlyweight類來創(chuàng)建。SQE28資訊網(wǎng)——每日最新資訊28at.com

模式應(yīng)用后案例

上述文本編輯器的案例,在使用享元模式后的代碼實(shí)現(xiàn)如下。SQE28資訊網(wǎng)——每日最新資訊28at.com

public class Text {//文本類private final String content;private final TextStyle style;public Text(String content, TextStyle style) {this.content = content;this.style = style;    }public void display() {        System.out.println("Text: " + this.content + ", Style: " + this.style);    }}public class TextStyle {//文本樣式類private final String font;private final int size;private final String color;public TextStyle(String font, int size, String color) {this.font = font;this.size = size;this.color = color;    }@Overridepublic String toString() {return "Font: "+ this.font +", Size: "+ this.size +", Color: "+ this.color;    }}

文本Text類中的TextStyle屬性可以共享,content屬性不能共享。因此,可以創(chuàng)建一個(gè)TextFactory類來共享TextStyle。SQE28資訊網(wǎng)——每日最新資訊28at.com

public class TextFactory {//享元工廠類private static final HashMap<String, TextStyle> stylesMap = new HashMap<>();public static TextStyle getTextStyle(String font,int size,String color){        stylesMap.putIfAbsent(font+size+color,new TextStyle(font,size,color));return stylesMap.get(font+size+color);    }}

享元工廠類有了之后,文本編輯器類代碼如下。SQE28資訊網(wǎng)——每日最新資訊28at.com

public class TextEditor {//文本編輯器類    List<Text> textList;public TextEditor(){this.textList =new ArrayList<>();    }// 添加文本到編輯器中public void addText(String content, String font, int size, String color){        TextStyle sharedStyle = TextFactory.getTextStyle(font, size, color);this.textList.add(new Text(content, sharedStyle));    }// 顯示所有文本內(nèi)容和樣式信息public void displayAllTexts(){for(Text text : this.textList){            text.display();        }    }// 清空所有文本內(nèi)容public void clearAllTexts(){this.textList.clear();        System.out.println("All texts cleared.");    }}

調(diào)用方代碼如下。SQE28資訊網(wǎng)——每日最新資訊28at.com

public class Client {//調(diào)用方代碼public static void main(String[] args) {// 創(chuàng)建文本編輯器對(duì)象        TextEditor editor = new TextEditor();// 使用編輯器添加相同樣式(Arial 12 Black)的文字片段        editor.addText("Hello World", "Arial", 12, "Black");        editor.addText("Welcome to the world of programming!", "Arial", 12,"Black");// 顯示所有文本內(nèi)容和樣式信息        System.out.println("Displaying all texts:");        editor.displayAllTexts();    }}

上述代碼中,在需要用到TextStyle的地方,通過享元工廠類獲取,而不是直接通過new方式創(chuàng)建,這樣所有文本類都可以共享一個(gè)TextStyle對(duì)象,這就是享元模式發(fā)揮作用的地方。SQE28資訊網(wǎng)——每日最新資訊28at.com

適用場景

當(dāng)程序中需要?jiǎng)?chuàng)建大量對(duì)象,并且這些對(duì)象共享一部分內(nèi)部狀態(tài),為了節(jié)省內(nèi)存空間,就可以考慮使用享元模式。SQE28資訊網(wǎng)——每日最新資訊28at.com

比如,在Java語言中,Integer、String等類,由于不同對(duì)象可能共享相同的字面量,因此其內(nèi)部都應(yīng)用了享元模式。SQE28資訊網(wǎng)——每日最新資訊28at.com

模式可能存在的困惑

困惑1:享元模式中,經(jīng)常提到的內(nèi)部狀態(tài)與外部狀態(tài),是什么含義?SQE28資訊網(wǎng)——每日最新資訊28at.com

一個(gè)類中可以包含多個(gè)屬性,其中可以被多個(gè)對(duì)象共享的狀態(tài)或?qū)傩猿蔀椤皟?nèi)部狀態(tài)”,而每個(gè)對(duì)象獨(dú)有的屬性或狀態(tài)則成為“外部狀態(tài)”。SQE28資訊網(wǎng)——每日最新資訊28at.com

困惑2:結(jié)構(gòu)圖中的Client與FlyweightFactory類有交互,但是案例中的TextEditor類中有使用TextFactory類,Client類并沒有使用?SQE28資訊網(wǎng)——每日最新資訊28at.com

在應(yīng)用設(shè)計(jì)模式時(shí),有時(shí)候不能按照設(shè)計(jì)模式標(biāo)準(zhǔn)結(jié)構(gòu)來生搬硬套。關(guān)鍵在于理解設(shè)計(jì)模式的核心思想之后能夠靈活運(yùn)用。SQE28資訊網(wǎng)——每日最新資訊28at.com

案例中的TextEditor其實(shí)相當(dāng)于結(jié)構(gòu)中的Client。Text類相當(dāng)于Flyweight類,而TextStyle類Text類中的共享狀態(tài)。案例的結(jié)構(gòu)與結(jié)構(gòu)中的結(jié)構(gòu)并不完全相同,但是對(duì)于享元模式中的共享思想運(yùn)用是一致的。SQE28資訊網(wǎng)——每日最新資訊28at.com

困惑3:享元模式相當(dāng)于是為了對(duì)象的復(fù)用,以節(jié)省存儲(chǔ)空間。在日常編程中,像對(duì)象池、線程池、連接池等技術(shù)也是為了對(duì)象的復(fù)用,那么區(qū)別在哪里呢?SQE28資訊網(wǎng)——每日最新資訊28at.com

主要區(qū)別在于時(shí)間觀上的不同。對(duì)于對(duì)象池、線程池、連接池等技術(shù)來說,在同一時(shí)刻,一個(gè)共享的對(duì)象只能用于一個(gè)調(diào)用方。只有該對(duì)象使用完畢重新放在池子之后,其他調(diào)用方才能使用。SQE28資訊網(wǎng)——每日最新資訊28at.com

而對(duì)于享元模式來說,同一時(shí)刻,可以被許多調(diào)用方同時(shí)共享復(fù)用,不需要在時(shí)間上錯(cuò)開使用。SQE28資訊網(wǎng)——每日最新資訊28at.com

本質(zhì)

享元模式的本質(zhì)是對(duì)類中屬性更細(xì)粒度的控制。在享元模式中,是通過狀態(tài)是否共享來分類的。SQE28資訊網(wǎng)——每日最新資訊28at.com

通過分類,就可以采取不同的操作。在享元模式中,通過狀態(tài)是否共享這種分類方式,就可以用來節(jié)省存儲(chǔ)空間,并且節(jié)省空間的同時(shí)其實(shí)也可以節(jié)省對(duì)象創(chuàng)建的時(shí)間。SQE28資訊網(wǎng)——每日最新資訊28at.com

這里值得提醒一下,時(shí)間和空間并不是在任何場景下都是一組矛盾關(guān)系,如空間增加可以減少時(shí)間,空間變少時(shí)間就會(huì)加長等。在享元模式中,是對(duì)象復(fù)雜度的降低導(dǎo)致了空間和時(shí)間都在某種程度上都有所減少。SQE28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,對(duì)于類中屬性也可能有其他分類方式,如本質(zhì)屬性和偶然屬性的劃分等。享元模式僅僅是處理這些分類方式中的一種特例。SQE28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-88926-0.html一文徹底搞明白享元模式

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Spring Boot 內(nèi)嵌 Web 容器啟動(dòng)原理,驚爆你的眼球!

下一篇: 一篇文章徹底理解 Java 的 Suppressed exceptions 機(jī)制

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 5月iOS設(shè)備好評(píng)榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個(gè)榜單又重新匯總了數(shù)據(jù),像安卓陣營的榜單都有著比較大的變動(dòng),不過iOS由于設(shè)備的更新?lián)Q代并沒有那么快,所以相對(duì)來說變化并不大,特別是iOS好評(píng)榜,老款設(shè)
  • 0糖0卡0脂 旭日森林仙草烏龍茶優(yōu)惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時(shí)要賣為79.9元,今日下單領(lǐng)取50元優(yōu)惠券,到手價(jià)為29.9元。產(chǎn)品規(guī)格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學(xué)習(xí)反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對(duì)代碼進(jìn)行反混淆,尤其是使用自定義混淆器對(duì)其進(jìn)行混淆時(shí)。什么是混
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動(dòng)設(shè)備上有一個(gè)固定元素,當(dāng)激活虛擬鍵盤時(shí),該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認(rèn)行為,在本文中,我們將探討這個(gè)問題、為什么會(huì)發(fā)生
  • 為什么你不應(yīng)該使用Div作為可點(diǎn)擊元素

    按鈕是為任何網(wǎng)絡(luò)應(yīng)用程序提供交互性的最常見方式。但我們經(jīng)常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯(cuò)過了許多內(nèi)置瀏覽器的功能。
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時(shí)候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯(cuò),每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會(huì)涉及各種各樣的安全任務(wù),包括但不限于:開發(fā)某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 當(dāng)家的盒馬,加速謀生

    來源 | 價(jià)值星球Planet作者 | 歸去來自己&ldquo;當(dāng)家&rdquo;的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計(jì)劃今年開放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • SN570 NVMe SSD固態(tài)硬盤 價(jià)格與性能兼具

    SN570 NVMe SSD固態(tài)硬盤是西部數(shù)據(jù)發(fā)布的最新一代WD Blue系列的固態(tài)硬盤,不僅閃存技術(shù)更為精進(jìn),性能也得到了進(jìn)一步的躍升。WD Blue SN570 NVMe SSD的包裝外
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲在线国产日韩欧美| 亚洲国产成人久久| 国产精品成人一区二区网站软件| 国产精品黄色在线观看| 国产精品视频久久| 精品盗摄一区二区三区| 99国产精品国产精品毛片| 亚洲欧美日本在线| 久久午夜av| 欧美日韩在线精品| 国产日韩av在线播放| 亚洲国产欧美一区| 亚洲视屏在线播放| 久久人人超碰| 欧美系列精品| 激情视频一区| 在线综合欧美| 麻豆久久精品| 国产精品久久激情| 亚洲国产精品一区二区久| 亚洲欧美第一页| 欧美人妖在线观看| 亚洲第一毛片| 中文一区二区| 亚洲欧美成人综合| 美女诱惑黄网站一区| 久久精品免费观看| 欧美在线视频一区二区三区| 久久综合久久综合这里只有精品| 免费日韩av电影| 国产日本欧洲亚洲| 一本色道**综合亚洲精品蜜桃冫| 欧美亚洲综合在线| 久久精品人人爽| 欧美综合二区| 久久男女视频| 久久久久一区二区三区| 模特精品裸拍一区| 午夜精品久久久久久久蜜桃app| 亚洲激情女人| 国产美女扒开尿口久久久| 国产精品二区二区三区| 亚洲国产精品成人精品| 国产精品成人国产乱一区| 国产欧美日韩一区二区三区在线观看| 国产视频精品网| 亚洲欧美国产制服动漫| 激情综合在线| 久久综合久色欧美综合狠狠 | 99在线精品免费视频九九视| 99re亚洲国产精品| 久久女同互慰一区二区三区| 国产精品呻吟| 在线视频欧美日韩| 欧美激情亚洲激情| 国内精品视频在线播放| 亚洲一区二区三区中文字幕| 欧美电影免费| 亚洲激情啪啪| 欧美电影在线观看完整版| 国产欧美精品日韩区二区麻豆天美 | 在线观看91精品国产入口| 先锋影院在线亚洲| 久久激情视频久久| 玖玖玖免费嫩草在线影院一区| 欧美精品一区二区三区蜜桃| 樱花yy私人影院亚洲| 久久国产一区二区| 一区二区三区在线视频播放| 久久综合99re88久久爱| 国产精品入口麻豆原神| 亚洲香蕉在线观看| 国产伦精品一区二区三区视频孕妇 | 狠狠色噜噜狠狠色综合久| 欧美激情一级片一区二区| 亚洲一区二区三区视频| 亚洲午夜激情网页| 极品裸体白嫩激情啪啪国产精品| 国产精品a久久久久久| 在线观看国产日韩| 国产精品麻豆成人av电影艾秋| 欧美极品在线播放| 欧美精品日韩一区| 欧美女同在线视频| 欧美日韩国内| 欧美日韩国产综合一区二区| 欧美人与禽猛交乱配视频| 欧美激情一区二区三区全黄 | 欧美三级资源在线| 欧美日韩在线直播| 国产精品久久国产精品99gif| 国产精品成人一区二区三区吃奶| 国产精品久久久久av免费| 欧美午夜免费影院| 久久综合色天天久久综合图片| 一区二区三区四区国产| 亚洲精品久久久久久下一站 | 最新中文字幕亚洲| 国产精品一区二区在线观看网站| 亚洲一区二区视频在线| 国产精品视频大全| 久久成人久久爱| 黄色成人小视频| 欧美成人免费在线| 99精品热视频只有精品10| 国产精品videosex极品| 欧美一区观看| 亚洲第一天堂无码专区| 欧美人成免费网站| 亚洲一区日韩| 韩日在线一区| 欧美激情亚洲自拍| 亚洲一二三区精品| 国产主播精品在线| 欧美国产成人在线| 亚洲一区二区在线看| 国产综合色在线| 欧美精品一区二区精品网| 亚洲免费在线看| 影音先锋亚洲视频| 欧美日韩综合精品| 久久精品在线播放| 99成人在线| 国产专区综合网| 欧美日韩午夜在线| 久久精品国产免费| 亚洲精品少妇| 国产午夜精品理论片a级探花| 欧美成ee人免费视频| 亚洲综合电影| 亚洲福利视频一区二区| 国产精品九九久久久久久久| 久久久青草青青国产亚洲免观| 亚洲美女精品久久| 国产亚洲电影| 欧美日韩国产在线| 久久久久综合网| 亚洲私人影院| 在线播放亚洲一区| 国产精品久久久久久久久久直播 | 久久高清一区| 99亚洲视频| 黄色成人精品网站| 国产精品v欧美精品v日韩精品| 久久久五月天| 亚洲一区尤物| 亚洲欧洲在线一区| 国产一区二区在线观看免费播放 | 欧美日韩免费观看一区| 久久午夜精品一区二区| 亚洲欧美国产制服动漫| 亚洲精品韩国| 一区二区三区在线看| 国产精品美女www爽爽爽| 欧美丰满高潮xxxx喷水动漫| 欧美主播一区二区三区美女 久久精品人| 日韩一级片网址| 在线观看成人av电影| 国产精品午夜久久| 亚洲精品久久久久久久久久久久| 国产精品日韩精品| 欧美成人在线网站| 久久久久九九视频| 亚洲欧美伊人| 一区二区三区|亚洲午夜| 亚洲福利视频二区| 国产在线拍偷自揄拍精品| 国产精品成人观看视频免费| 欧美护士18xxxxhd| 久久综合成人精品亚洲另类欧美| 亚洲欧美视频一区二区三区| 一本不卡影院| 亚洲精品一级| 亚洲国产一二三| 激情视频一区二区三区| 国产欧美日韩视频| 国产精品每日更新| 欧美视频免费在线| 欧美日韩国产成人在线91| 免费亚洲网站| 久久夜色精品亚洲噜噜国产mv| 欧美亚洲一区三区| 亚洲欧美成人| 亚洲欧美清纯在线制服| 亚洲网站在线| 亚洲视频专区在线| 中文有码久久| 亚洲午夜性刺激影院| 亚洲丝袜av一区| 亚洲网在线观看| 中日韩午夜理伦电影免费| 99视频热这里只有精品免费| 亚洲日本成人女熟在线观看| 亚洲国产成人tv| 亚洲成人自拍视频| 亚洲国产精品999| 在线观看视频欧美| 亚洲第一福利社区| 亚洲国产精品一区| 亚洲精品国产精品乱码不99| 亚洲精品久久嫩草网站秘色| 亚洲精品国产精品国自产观看| 亚洲人成在线免费观看| 亚洲精品一区二区三区99|