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

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

這篇具有很好參考價(jià)值的文章主要介紹了【設(shè)計(jì)模式】騰訊二面:自動販賣機(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)行交互。

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

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

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

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

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

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

然后,我們?yōu)樽詣迂溬u機(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)自動販賣機(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)...
}

這樣,我們的自動販賣機(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)行為可能會不同。

首先,定義一個(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)"下則會恢復(fù)播放。這就是狀態(tài)模式的魅力,使得音頻播放器的代碼更易于管理和維護(hù)。如果我們需要添加新的狀態(tài)或行為,也可以輕松地進(jìn)行拓展。希望通過這篇博文,你能對狀態(tài)模式有更深入的理解和應(yīng)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-808999.html

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(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)文章

  • Selenium自動化測試設(shè)計(jì)模式-PO模式

    Selenium自動化測試設(shè)計(jì)模式-PO模式

    在python自動化過程中,Selenium自動化測試中有一個(gè)名字常常被提及PageObject(思想與面向?qū)ο蟮奶匦韵嗤?,通過PO模式可以大大提高測試用例的維護(hù)效率。 不了解po設(shè)計(jì)模式的可自行百度 面向?qū)ο蟮奶匦?:封裝、繼承、多態(tài) 傳統(tǒng)測試腳本的弊端: 測試腳本分離,維護(hù)成本高

    2023年04月08日
    瀏覽(88)
  • PO設(shè)計(jì)模式是selenium自動化測試中最佳的設(shè)計(jì)模式之一

    PO設(shè)計(jì)模式是selenium自動化測試中最佳的設(shè)計(jì)模式之一

    Page Object Model:PO設(shè)計(jì)模式是selenium自動化測試中最佳的設(shè)計(jì)模式之一,主要體現(xiàn)在對界面交互細(xì)節(jié)的封裝,也就是在實(shí)際測試中只關(guān)注業(yè)務(wù)流程就OK了傳統(tǒng)的設(shè)計(jì)中,在新增測試用例之后,代碼會有以下幾個(gè)問題:1.易讀性差:一連串的find element會使代碼顯得雜亂無章2.可擴(kuò)展

    2024年02月11日
    瀏覽(88)
  • web自動化測試-PageObject 設(shè)計(jì)模式

    web自動化測試-PageObject 設(shè)計(jì)模式

    為 UI 頁面寫測試用例時(shí)(比如 web 頁面,移動端頁面),測試用例會存在大量元素和操作細(xì)節(jié)。當(dāng) UI 變化時(shí),測試用例也要跟著變化, PageObject 很好的解決了這個(gè)問題。 使用 UI 自動化測試工具時(shí)(包括 selenium,appium 等),如果無統(tǒng)一模式進(jìn)行規(guī)范,隨著用例的增多會變得難

    2024年02月14日
    瀏覽(14)
  • 【W(wǎng)EB自動化測試】-PO設(shè)計(jì)模式

    如用例多了,那么登陸的代碼就需要在每個(gè)模塊化中都加入,所以考慮公共部分提取出來,做成一個(gè)公共的工具類。習(xí)慣命名為utils.py。 定義獲取驅(qū)動對象的工具類 封裝\\\"獲取彈出框的提示信息\\\" PO是Page Object的縮寫,PO模式是自動化測試項(xiàng)目開發(fā)實(shí)踐的最佳設(shè)計(jì)模式之一。核心

    2024年02月16日
    瀏覽(98)
  • 軟件測試/測試開發(fā)丨Web自動化 PageObject設(shè)計(jì)模式

    軟件測試/測試開發(fā)丨Web自動化 PageObject設(shè)計(jì)模式

    本文為霍格沃茲測試開發(fā)學(xué)社學(xué)員學(xué)習(xí)筆記分享 原文鏈接:https://ceshiren.com/t/topic/27167 馬丁福勒個(gè)人博客 selenium 官網(wǎng) 無法適應(yīng) UI 頻繁變化 無法清晰表達(dá)業(yè)務(wù)用例場景 大量的樣板代碼 driver/find/click 降低 UI 變化導(dǎo)致的測試用例脆弱性問題 讓用例清晰明朗,與具體實(shí)現(xiàn)無關(guān) 字

    2024年02月10日
    瀏覽(26)
  • Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式

    Selenium Web自動化測試——基于unittest框架的PO設(shè)計(jì)模式

    ??? 交流討論: 歡迎加入我們一起學(xué)習(xí)! ?? 資源分享 : 耗時(shí)200+小時(shí)精選的「軟件測試」資料包 ??? 教程推薦: 火遍全網(wǎng)的《軟件測試》教程?? ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請指正! 前面一直在講接口自動化測試框架與案例分享,很少講Selenium這個(gè)We

    2024年03月21日
    瀏覽(92)
  • 讓自動化測試秒殺繁瑣操作?試試PO模式設(shè)計(jì)框架

    讓自動化測試秒殺繁瑣操作?試試PO模式設(shè)計(jì)框架

    目錄:導(dǎo)讀 引言 po模式 優(yōu)勢: ?目錄解釋: 頁面對象設(shè)計(jì)模式: base基礎(chǔ)層: page對象層: ?test:測試層 data數(shù)據(jù)層: ?common層: ?untils: ?config層: run層: report: 結(jié)語 你是否曾經(jīng)因?yàn)槊看胃鹿δ芏家匦聦懸欢炎詣踊瘻y試代碼而感到疲憊不堪? 或者因?yàn)轫撁嬖氐念l繁變

    2024年02月02日
    瀏覽(100)
  • 〖Python WEB 自動化測試實(shí)戰(zhàn)篇?〗- 實(shí)戰(zhàn) - PageObject框架設(shè)計(jì)(亦叫做 “頁面對象” 模式)

    訂閱 Python全棧白寶書-零基礎(chǔ)入門篇 可報(bào)銷! 白嫖入口-請點(diǎn)擊我。 推薦他人訂閱,可獲取扣除平臺費(fèi)用后的35%收益,文末名片加V! 說明:該文屬于 Python全棧白寶書專欄, 免費(fèi)階段訂閱數(shù)量4300+ , 購買任意白寶書體系化專欄可加入 TFS-CLUB 私域社區(qū)。 福利:加入社區(qū)的小伙

    2024年02月02日
    瀏覽(103)
  • 100、基于STM32單片機(jī)自動跟隨小車 紅外遙控控制小車避障模式 跟隨模式設(shè)計(jì)(程序+原理圖+PCB源文件+流程圖+硬件設(shè)計(jì)資料+元器件清單等)

    100、基于STM32單片機(jī)自動跟隨小車 紅外遙控控制小車避障模式 跟隨模式設(shè)計(jì)(程序+原理圖+PCB源文件+流程圖+硬件設(shè)計(jì)資料+元器件清單等)

    智能小車通過各種感應(yīng)器獲得外部環(huán)境信息和內(nèi)部運(yùn)動狀態(tài),實(shí)現(xiàn)在復(fù)雜環(huán)境背景下的自主運(yùn)動,從而完成具有特定功能的機(jī)器人系統(tǒng)。而隨著智能化電器時(shí)代的到來,它們在為人們提供的舒適的生活環(huán)境的同時(shí),也提高了制造智能化電器對于人才要求的門檻。智能小車是集

    2024年02月15日
    瀏覽(115)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包