国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

騰訊二面:自動(dòng)販賣機(jī)/音頻播放器使用了什么設(shè)計(jì)模式?

這篇具有很好參考價(jià)值的文章主要介紹了騰訊二面:自動(dòng)販賣機(jī)/音頻播放器使用了什么設(shè)計(jì)模式?。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

狀態(tài)模式是什么?

狀態(tài)模式,也被稱作狀態(tài)對象模式,是一種行為設(shè)計(jì)模式。

當(dāng)一個(gè)對象的內(nèi)在狀態(tài)改變時(shí),允許改變其行為,這個(gè)對象看起來像是改變了其類。

它讓對象在其內(nèi)部狀態(tài)改變時(shí)改變自己的行為。外部調(diào)用者無需了解對象內(nèi)部狀態(tài)的具體實(shí)現(xiàn),僅需通過簡單的接口進(jìn)行交互。

騰訊二面:自動(dòng)販賣機(jī)/音頻播放器使用了什么設(shè)計(jì)模式?,設(shè)計(jì)模式,前端,面試,java,設(shè)計(jì)模式

狀態(tài)模式適用于哪些場景?

當(dāng)你的對象基于其狀態(tài)有不同的行為,并且其狀態(tài)可以在運(yùn)行時(shí)動(dòng)態(tài)轉(zhuǎn)換時(shí),你應(yīng)該考慮使用狀態(tài)模式。

如何在Java中實(shí)現(xiàn)狀態(tài)模式?——自動(dòng)販賣機(jī)

讓我們以一個(gè)簡單的售賣飲料的自動(dòng)販賣機(jī)為例,來展示如何在Java中實(shí)現(xiàn)狀態(tài)模式。我們首先定義一個(gè)狀態(tài)接口:

public interface State {
    void insertCoin();
    void pushButton();
    void dispense();
}

然后,我們?yōu)樽詣?dòng)販賣機(jī)的每一種狀態(tài)實(shí)現(xiàn)該接口:

public class NoCoinState implements State {
    public void insertCoin() {
        // 接收硬幣,并轉(zhuǎn)換狀態(tài)
    }

    public void pushButton() {
        // 提示用戶先投幣
    }

    public void dispense() {
        // 無行為
    }
}

public class HasCoinState implements State {
    public void insertCoin() {
        // 提示用戶已經(jīng)投過幣了
    }

    public void pushButton() {
        // 檢查庫存,然后轉(zhuǎn)換狀態(tài)
    }

    public void dispense() {
        // 無行為
    }
}

public class SoldState implements State {
    public void insertCoin() {
        // 提示用戶等待飲料出貨
    }

    public void pushButton() {
        // 提示用戶等待飲料出貨
    }

    public void dispense() {
        // 出貨,然后轉(zhuǎn)換狀態(tài)
    }
}

最后,我們實(shí)現(xiàn)自動(dòng)販賣機(jī)類:

public class VendingMachine {
    private State noCoinState;
    private State hasCoinState;
    private State soldState;
    
    private State state;  // 當(dāng)前狀態(tài)

    public VendingMachine() {
        noCoinState = new NoCoinState();
        hasCoinState = new HasCoinState();
        soldState = new SoldState();
        
        state = noCoinState;  // 初始狀態(tài)
    }

    public void insertCoin() {
        state.insertCoin();
    }

    public void pushButton() {
        state.pushButton();
        state.dispense();
    }

    // 其他方法,例如改變狀態(tài)...
}

這樣,我們的自動(dòng)販賣機(jī)就可以根據(jù)自身的狀態(tài)決定相應(yīng)的行為,而無需在一個(gè)方法中使用大量的條件語句來判斷狀態(tài)。此外,如果未來我們需要添加更多的狀態(tài)或者行為,我們也可以很容易地進(jìn)行拓展。

另一個(gè)例子——音頻播放器

讓我們從一個(gè)現(xiàn)實(shí)生活的例子看一看狀態(tài)模式如何被運(yùn)用到音頻播放器的開發(fā)中。

音頻播放器根據(jù)用戶的操作和播放條件,可能有多種的狀態(tài):例如,“播放狀態(tài)”,“暫停狀態(tài)”,“停止?fàn)顟B(tài)"和"緩沖狀態(tài)”。不同的狀態(tài)下,音頻播放器的響應(yīng)行為可能會(huì)不同。

首先,定義一個(gè)狀態(tài)接口:

public interface State {
    void play();
    void pause();
    void stop();
    void buffer();
}

然后,實(shí)現(xiàn)播放器的每一個(gè)狀態(tài):

public class PlayingState implements State {
    public void play() {
        // 無響應(yīng)或提示正在播放
    }

    public void pause() {
        // 暫停播放,并轉(zhuǎn)換到暫停狀態(tài)
    }

    public void stop() {
        // 停止播放,并轉(zhuǎn)換到停止?fàn)顟B(tài)
    }
    
    public void buffer() {
        // 無行為或轉(zhuǎn)到緩沖狀態(tài)
    }
}

// 類似的,我們還可以定義PauseState、StopState和BufferingState類

在定義了各種狀態(tài)以后,我們就可以在音頻播放器類中使用這些狀態(tài):

public class AudioPlayer {
    private State playingState;
    private State pauseState;
    private State stopState;
    private State bufferingState;
    
    private State state;  // 當(dāng)前狀態(tài)

    public AudioPlayer() {
        playingState = new PlayingState();
        pauseState = new PauseState();
        stopState = new StopState();
        bufferingState = new BufferingState();
        
        state = stopState;  // 初始狀態(tài)
    }

    public void play() {
        state.play();
    }

    public void pause() {
        state.pause();
    }
    
    public void stop() {
        state.stop();
    }

    public void buffer() {
        state.buffer();
    }
    
    // 其他方法,例如改變狀態(tài)...
}

這樣,音頻播放器就可以根據(jù)當(dāng)前的狀態(tài)來進(jìn)行不同的操作,比如在"播放狀態(tài)"下如果用戶按了播放按鈕,播放器可以選擇無響應(yīng)或者給出正在播放的提示,而在"暫停狀態(tài)"下則會(huì)恢復(fù)播放。這就是狀態(tài)模式的魅力,使得音頻播放器的代碼更易于管理和維護(hù)。如果我們需要添加新的狀態(tài)或行為,也可以輕松地進(jìn)行拓展。希望通過這篇博文,你能對狀態(tài)模式有更深入的理解和應(yīng)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-807567.html

到了這里,關(guān)于騰訊二面:自動(dòng)販賣機(jī)/音頻播放器使用了什么設(shè)計(jì)模式?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 騰訊系統(tǒng)測試一面+二面+HR面(面經(jīng))

    從3月內(nèi)推后(內(nèi)推崗位是運(yùn)維),經(jīng)歷了兩面,被告知崗位不合適,然后涼涼到了3月底。緊接著參加了在4月的筆試,終于在4.23接到了騰訊再一次的面試,4.26已經(jīng)完成所有面試,狀態(tài)是offer報(bào)批中,等待offer call中,在五一假期期間拒絕了南方基金的offer,5.4終于收到offer。

    2024年02月04日
    瀏覽(19)
  • 2023秋招--騰訊天美--游戲客戶端--二面面經(jīng)

    2023秋招–騰訊天美–游戲客戶端–一面面經(jīng) 面試官提問:20min 自我介紹。 大學(xué)學(xué)了哪些課程? C#用的多還是C++? 內(nèi)存對齊了解嗎?說下原理以及為什么需要內(nèi)存對齊 C#怎么調(diào)用C++代碼? StringBuilder和String的區(qū)別?拼接字符串有什么區(qū)別?StringBuilder一定優(yōu)于String? 場景題:

    2024年02月05日
    瀏覽(24)
  • 騰訊二面:有 40 億個(gè) QQ 號,限制 1G 內(nèi)存,問如何去重?被問懵了!

    騰訊二面:有 40 億個(gè) QQ 號,限制 1G 內(nèi)存,問如何去重?被問懵了!

    40億個(gè)QQ號,限制1G內(nèi)存,如何去重? 40億個(gè)unsigned int,如果直接用內(nèi)存存儲(chǔ)的話,需要: 4*4000000000 /1024/1024/1024 = 14.9G ,考慮到其中有一些重復(fù)的話,那1G的空間也基本上是不夠用的。 想要實(shí)現(xiàn)這個(gè)功能,可以借助位圖。 使用位圖的話,一個(gè)數(shù)字只需要占用1個(gè)bit,那么40億個(gè)

    2024年02月07日
    瀏覽(15)
  • 騰訊二面:如何保證接口冪等性?高并發(fā)下的接口冪等性如何實(shí)現(xiàn)?

    什么是接口冪等性 接口冪等性這一概念源于數(shù)學(xué),原意是指一個(gè)操作如果連續(xù)執(zhí)行多次所產(chǎn)生的結(jié)果與僅執(zhí)行一次的效果相同,那么我們就稱這個(gè)操作是冪等的。在互聯(lián)網(wǎng)領(lǐng)域,特別是在Web服務(wù)、API設(shè)計(jì)和分布式系統(tǒng)中,接口冪等性具有非常重要的意義。 具體到HTTP接口或者

    2024年03月19日
    瀏覽(30)
  • uniapp之音頻播放器

    uniapp之音頻播放器

    日常業(yè)務(wù)會(huì)遇到 微信音頻 mp3播放器, 特別是微信文章閱讀,下面僅作參考 1.解決滑動(dòng)卡頓bug 加了防抖 2.滑動(dòng)進(jìn)度條時(shí) 先暫停再播放 就不會(huì)出現(xiàn)卡頓 3.初始化時(shí) 要onCanplay鉤子中 setInterval 獲取音頻文件長度 不然會(huì)顯示 0 注意用了vantUI 框架的icon 不用可以去掉 換圖片或者其他

    2024年02月11日
    瀏覽(23)
  • Python實(shí)現(xiàn)本地視頻/音頻播放器

    Python實(shí)現(xiàn)本地視頻/音頻播放器

    在Python中,有幾個(gè)庫可以用于視頻播放,但是沒有一個(gè)庫是完美的,因?yàn)樗鼈兛赡芤蕾囉谕獠寇浖蛴幸恍┫拗啤?先看介紹用Python實(shí)現(xiàn)本地視頻播放器,再介紹用Python實(shí)現(xiàn)本地音樂播放器。 Python 實(shí)現(xiàn)本地視頻播放器 與HTML5+JavaScript實(shí)現(xiàn)本地視頻播放器相比,使用Python實(shí)現(xiàn)比

    2024年04月26日
    瀏覽(15)
  • Audio API 實(shí)現(xiàn)音頻播放器

    Audio API 實(shí)現(xiàn)音頻播放器

    市面上實(shí)現(xiàn)音頻播放器的庫有很多,比如wavesurfer.js、howler.js等等,但是都不支持大音頻文件處理,100多M的文件就有可能導(dǎo)致程序崩潰??傊臀夷壳暗男枨蟛惶希源蛩阕约簩?shí)現(xiàn)一個(gè)音頻播放器,這樣不管什么需求 在技術(shù)上都可控。下面我們簡單介紹下 wavesurferJs 、

    2024年02月10日
    瀏覽(18)
  • 播放器開發(fā)(六):音頻幀處理并用SDL播放

    AudioOutPut 模塊 1、初始化【分配緩存、讀取信息】 2、開始線程工作【從隊(duì)列讀幀-重采樣-SDL回調(diào)-寫入音頻播放數(shù)據(jù)-SDL進(jìn)行播放】 分配緩存 重采樣相關(guān) SDL的音頻回調(diào) AudioOutPut PlayerMain 添加音頻輸出代碼 測試運(yùn)行結(jié)果 如果需要同時(shí)執(zhí)行視頻和音頻的輸出,記得要在解復(fù)用模塊

    2024年02月20日
    瀏覽(33)
  • Vue實(shí)現(xiàn)自定義音頻播放器組件

    Vue實(shí)現(xiàn)自定義音頻播放器組件

    template javascript less 文檔參考 關(guān)于 Audio 自定義樣式 H5 audio 音頻標(biāo)簽自定義樣式修改以及添加播放控制事件

    2024年02月12日
    瀏覽(20)
  • Android 中封裝優(yōu)雅的 MediaPlayer 音頻播放器,支持多個(gè)播放器

    Android 中封裝優(yōu)雅的 MediaPlayer 音頻播放器,支持多個(gè)播放器實(shí)例的示例: 上述代碼中,使用 getInstance() 方法獲取 AudioPlayer 的單例對象,參數(shù)傳入 Context 對象。 在 getInstance() 方法中判斷單例對象是否為空,如果為空則創(chuàng)建新的 AudioPlayer 對象,否則返回已有的單例對象。 這樣

    2024年02月12日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包