真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

State狀態(tài)模式怎么實(shí)現(xiàn)

本文小編為大家詳細(xì)介紹“State狀態(tài)模式怎么實(shí)現(xiàn)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“State狀態(tài)模式怎么實(shí)現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

目前創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、容城網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

舉例子

團(tuán)隊(duì)接口人

團(tuán)隊(duì)是由很多同學(xué)組成的,但有一位接口人 TL,這位 TL 可能一會(huì)兒和產(chǎn)品經(jīng)理談需求,一會(huì)兒和其他 TL 談規(guī)劃,一會(huì)兒和 HR 談人事,總之要做很多事情,很顯然一個(gè)人是忙不過(guò)來(lái)的。TL 通過(guò)將任務(wù)分發(fā)給團(tuán)隊(duì)中每個(gè)同學(xué),而不讓他們直接和產(chǎn)品經(jīng)理、其他 TL、HR 接觸,那么這位 TL 的辦事效率就會(huì)相當(dāng)高,因?yàn)槊總€(gè)同學(xué)只負(fù)責(zé)一塊具體的業(yè)務(wù),而 TL 在不同時(shí)刻叫上不同的同學(xué),讓他們出面解決他們負(fù)責(zé)的專業(yè)領(lǐng)域問(wèn)題,那么在外面看,這位 TL 團(tuán)隊(duì)能力很廣,在內(nèi)看,每個(gè)人負(fù)責(zé)的事情也比較單一。

臺(tái)燈按鈕

我們經(jīng)常會(huì)看到只有一個(gè)按鈕的臺(tái)燈,但是可以通過(guò)按鈕調(diào)節(jié)亮度,大概是如下一個(gè)循環(huán) “關(guān) -> 弱光 -> 亮 -> 強(qiáng)光 -> 關(guān)”,那么每次按按鈕后,要跳轉(zhuǎn)到什么狀態(tài),其實(shí)和當(dāng)前狀態(tài)有關(guān)。我們可以用 if else 解決這個(gè)問(wèn)題,也可以用狀態(tài)模式解決。

用狀態(tài)模式解決,就是將這四個(gè)狀態(tài)封裝為四個(gè)類,每個(gè)類都執(zhí)行按下按鈕后要跳轉(zhuǎn)到的狀態(tài),這樣未來(lái)新增一種模式,只要改變部分類即可。

數(shù)據(jù)庫(kù)連接器

在數(shù)據(jù)庫(kù)連接前后,這個(gè)連接器的狀態(tài)顯然非常不同,我們?nèi)绻麅H用一個(gè)類描述數(shù)據(jù)庫(kù)連接器,則內(nèi)部免不了寫(xiě)大量分支語(yǔ)句進(jìn)行狀態(tài)判斷。那么此時(shí)有更好的方案嗎?狀態(tài)模式告訴我們,可以創(chuàng)建多個(gè)不同狀態(tài)類,比如連接前、連接中、連接后三種狀態(tài)類,在不同時(shí)刻內(nèi)部會(huì)替換為不同的子類,它們都繼承同樣的父類,所以外面看上去不需要感知內(nèi)部的狀態(tài)變化,內(nèi)部又可以進(jìn)行狀態(tài)拆分,進(jìn)行更好的維護(hù)。

意圖解釋

意圖:允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。對(duì)象看起來(lái)似乎修改了它的類。

重點(diǎn)在 “內(nèi)部狀態(tài)” 的理解,也就是狀態(tài)改變是由對(duì)象內(nèi)部觸發(fā)的,而不是外部,所以 外部根本無(wú)需關(guān)心對(duì)象是否用了狀態(tài)模式,拿數(shù)據(jù)庫(kù)連接器的例子來(lái)說(shuō),不管這個(gè)類是用 if else 堆砌的,還是用狀態(tài)模式做的,都完全不妨礙它對(duì)外提供的穩(wěn)定 API(接口問(wèn)題),所以狀態(tài)模式實(shí)質(zhì)上是一種內(nèi)聚的設(shè)計(jì)模式。

結(jié)構(gòu)圖

State: 狀態(tài)接口,類比為臺(tái)燈狀態(tài)。

ConcreteState: 具體狀態(tài),都繼承于 State,類比為臺(tái)燈的強(qiáng)光、弱光狀態(tài)。

代碼例子

下面例子使用 typescript 編寫(xiě)。

// 定義狀態(tài)接口

interface State {

  // 模擬臺(tái)燈點(diǎn)亮

  show: () => string

}

class Light1 implements State {

  constructor(context: Context) {

    this.context = context

  }

  show() {

    return '關(guān)燈'

  }

  // 按下按鈕

  public click() {

    this.context.setState(new Light2(this.context))

  }

}

class Light2 implements State {

  constructor(context: Context) {

    this.context = context

  }

  show() {

    return '弱光'

  }

  // 按下按鈕

  public click() {

    this.context.setState(new Light3(this.context))

  }

}

class Light3 implements State {

  constructor(context: Context) {

    this.context = context

  }

  show() {

    return '亮'

  }

  // 按下按鈕

  public click() {

    this.context.setState(new Light4(this.context))

  }

}

class Light4 implements State {

  constructor(context: Context) {

    this.context = context

  }

  show() {

    return '強(qiáng)光'

  }

  // 按下按鈕

  public click() {

    this.context.setState(new Light1(this.context))

  }

}

// 臺(tái)燈

public class Lamp {

  // 當(dāng)前狀態(tài)

  private currentState = new Light1(this)

  protected setState(state: State) {

    this.currentState = state

  }

  // 按下按鈕

  public click() {

    this.getState().click()

  }

}

const lamp = new Lamp() // 關(guān)閉

lamp.click() // 弱光

lamp.click() // 亮

lamp.click() // 強(qiáng)光

lamp.click() // 關(guān)閉

其實(shí)有很多種方式來(lái)實(shí)現(xiàn),不必拘泥于形式,大體上只要保證由多個(gè)類實(shí)現(xiàn)不同狀態(tài),每個(gè)類實(shí)現(xiàn)到下一個(gè)狀態(tài)切換就好了。

讀到這里,這篇“State狀態(tài)模式怎么實(shí)現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁(yè)標(biāo)題:State狀態(tài)模式怎么實(shí)現(xiàn)
網(wǎng)站鏈接:http://weahome.cn/article/pjieij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部