亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

訪問(wèn)者模式:從介紹到實(shí)踐

百萬(wàn)級(jí)高并發(fā)WebRTC流媒體服務(wù)器設(shè)計(jì)與開(kāi)發(fā)

download:https://www.zxit666.com/1305/

01什么是訪客模式?

訪問(wèn)者模式的定義如下,是指在不改變數(shù)據(jù)結(jié)構(gòu)的情況下,提前定義新的操作。

封裝了一些作用于數(shù)據(jù)結(jié)構(gòu)中元素的操作,可以在不改變數(shù)據(jù)結(jié)構(gòu)的情況下定義作用于這些元素的新操作。

但在實(shí)際應(yīng)用中,我發(fā)現(xiàn)有些例子并非如此。在一些例子中,沒(méi)有穩(wěn)定的數(shù)據(jù)結(jié)構(gòu),但有穩(wěn)定的算法。在亦舒看來(lái),訪客模式是:固定不變的,開(kāi)放可變的。

先說(shuō)一個(gè)生活中的例子:一個(gè)科學(xué)家憑記憶面試。眾所周知,科學(xué)家在接受采訪時(shí),肯定有一些程序上的限制。你是不可能隨便提問(wèn)的。我們假設(shè)這個(gè)過(guò)程是:先問(wèn)科學(xué)家的學(xué)校經(jīng)歷,再談你的工作經(jīng)歷,最后談你的科研成果。那么這個(gè)過(guò)程中固定的是什么呢?固定的是面試流程。有什么變化?改變的是,不同的記者可能會(huì)根據(jù)他們的學(xué)校經(jīng)歷提出不同的問(wèn)題。

按照我們之前的理解,訪客模式其實(shí)就是把不可改變的東西固定下來(lái),把變化打開(kāi)。然后我們可以抽象出科學(xué)家的采訪。

首先需要有一個(gè)Visitor類,定義了一些外部(記者)可以做的事情(提問(wèn)學(xué)校經(jīng)歷、工作經(jīng)歷、科研成果)。

公共接口訪問(wèn)者{

public void askSchoolExperience(字符串名);

public void askWorkExperience(字符串名);

public void askScienceAchievement(字符串名);

}

然后聲明一個(gè)XinhuaVisitor類來(lái)實(shí)現(xiàn)Visitor類,意思是新華社的一個(gè)記者(訪問(wèn)者)要訪問(wèn)科學(xué)家。

公共類XinhuaVisitor實(shí)現(xiàn)訪問(wèn)者{

@覆蓋

public void askSchoolExperience(字符串名稱){

System.out.printf("請(qǐng)問(wèn)%s:你在學(xué)校最大的成就是什么?n ",名稱);

}

@覆蓋

public void askWorkExperience(字符串名稱){

System.out.printf("請(qǐng)問(wèn)%s:工作中最難忘的事是什么?n ",名稱);

}

@覆蓋

public void askScienceAchievement(字符串名稱){

System.out.printf("請(qǐng)問(wèn)%s:最大的科研成果是什么?",姓名);

}

}

然后聲明一個(gè)科學(xué)家類,說(shuō)明是科學(xué)家。科學(xué)家通過(guò)一個(gè)accept()方法接收記者(訪問(wèn)者)的采訪申請(qǐng)并存儲(chǔ)。科學(xué)家定義了一種面試方法,把面試過(guò)程固定死。只有我教你問(wèn)什么,我才會(huì)讓你(記者)提問(wèn)。

公共類科學(xué)家{

私人訪問(wèn)者訪問(wèn)者;

私有字符串名稱;

私人科學(xué)家(){}

公共科學(xué)家(字符串名稱){

this.name = name

}

公共void接受(訪問(wèn)者訪問(wèn)者){

this.visitor =訪問(wèn)者;

}

公開(kāi)無(wú)效面試(){

system . out . println("-");

System.out.println(" -開(kāi)始說(shuō)學(xué)校經(jīng)歷-");

visitor.askSchoolExperience(姓名);

System.out.println(" -開(kāi)始說(shuō)工作經(jīng)歷-");

visitor.askWorkExperience(名稱);

System.out.println(" -開(kāi)始說(shuō)科研成果-");

visitor.askScienceAchievement(姓名);

}

}

最后,我們聲明一個(gè)場(chǎng)景類客戶端來(lái)模擬面試過(guò)程。

公共類客戶端{(lán)

公共靜態(tài)void main(String[] args) {

科學(xué)家楊=新科學(xué)家();

yang . accept(new XinhuaVisitor());

yang . interview();

}

}

操作的結(jié)果是:

-訪問(wèn)開(kāi)始

-開(kāi)始談?wù)搶W(xué)校經(jīng)歷-

請(qǐng)問(wèn),楊振寧:你在學(xué)校最大的成就是什么?

-開(kāi)始談?wù)摴ぷ鹘?jīng)歷-

請(qǐng)問(wèn)楊振寧:你在工作中最難忘的觀點(diǎn)是什么?

-開(kāi)始談?wù)摽蒲谐晒?

請(qǐng)問(wèn)楊振寧:最大的科研成就是什么?

看到這里,大家對(duì)訪客模式的本質(zhì)(固定不變,開(kāi)放可變)有了更感性的認(rèn)識(shí)。在這個(gè)例子中,不變的、固定的是面試過(guò)程。改變的是你可以問(wèn)不同的問(wèn)題。

一般來(lái)說(shuō),訪問(wèn)者模式的類結(jié)構(gòu)如下圖所示:

訪問(wèn)者訪問(wèn)者界面。訪問(wèn)者定義訪問(wèn)者可以做什么。這就需要你分析什么是可改變的,把這些可改變的內(nèi)容抽象成一個(gè)訪問(wèn)者接口方法,把它開(kāi)放出來(lái)。被訪問(wèn)者的信息實(shí)際上是通過(guò)訪問(wèn)者的參數(shù)傳遞的。

具體訪問(wèn)者。特定訪問(wèn)者定義了特定類型訪問(wèn)者的實(shí)現(xiàn)。對(duì)于新華社記者來(lái)說(shuō),他們更關(guān)心楊振寧的科學(xué)成就,所以提問(wèn)時(shí)更傾向于挖掘成就。但對(duì)于青年報(bào)記者來(lái)說(shuō),他們的讀者是青少年,他們更關(guān)注楊振寧在學(xué)習(xí)和工作中的精神。

元素具體元素。這指的是特定的被訪問(wèn)的類,在我們的例子中,是科學(xué)家類。一般情況下,我們會(huì)提供一個(gè)accept()方法來(lái)接收訪問(wèn)者參數(shù),這將相當(dāng)于接受它的模型應(yīng)用。然而,這種方法不是必需的。只要能得到visitor對(duì)象,就可以定義這個(gè)參數(shù)傳遞。

對(duì)于訪問(wèn)者模式,最重要的是訪問(wèn)者、具體訪問(wèn)者和元素。Visitor和ConcreteVisitor定義了訪問(wèn)者具體能做什么,被訪問(wèn)者的參數(shù)通過(guò)參數(shù)傳遞給訪問(wèn)者。元素通過(guò)各種方法獲取被訪問(wèn)的對(duì)象,通常是通過(guò)accept()方法,但這不是絕對(duì)的。

應(yīng)該注意的是,我們對(duì)設(shè)計(jì)模式的研究側(cè)重于理解類之間的關(guān)系以及它們所傳達(dá)的信息。至于如何傳遞,是通過(guò)accept()方法還是通過(guò)構(gòu)造函數(shù),都不是重點(diǎn)。

分享到:
標(biāo)簽:WebRTC
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定