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

設(shè)計模式(18):狀態(tài)模式

這篇具有很好參考價值的文章主要介紹了設(shè)計模式(18):狀態(tài)模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

核心

  • 用于解決系統(tǒng)中復(fù)雜對象的狀態(tài)轉(zhuǎn)換以及不同狀態(tài)下行為的封裝問題

結(jié)構(gòu)

  • 環(huán)境類(Context):
    • 環(huán)境類中維護(hù)一個State對象,它定義了當(dāng)前的狀態(tài),并委托當(dāng)前狀態(tài)處理一些請求;
  • 抽象狀態(tài)類(State):
    • 用于封裝對象的一個特定狀態(tài)所對應(yīng)的行為;
  • 具體狀態(tài)類(ConcreteState):
    • 實現(xiàn)了抽象狀態(tài)類,每個具體狀態(tài)封裝了各自狀態(tài)對應(yīng)的行為;

場景

  • 電梯的運行
    • 維修、正常、自動關(guān)門、自動開門、向上運行、向下運行、消防狀態(tài)
  • 紅綠燈
    • 紅燈、黃燈、綠燈
  • 請假審批
  • 企業(yè)或政府系統(tǒng)
    • 公文的審批
  • 網(wǎng)購訂單狀態(tài)
    • 下單
    • 已付款
    • 已發(fā)貨
    • 發(fā)貨中
    • 已收貨

開發(fā)中常見的場景

  • 銀行系統(tǒng)中賬號狀態(tài)的管理
  • OA系統(tǒng)中公文狀態(tài)的管理
  • 酒店系統(tǒng)中,房間狀態(tài)的管理
  • 線程對象各狀態(tài)之間的切換

舉例代碼實現(xiàn)

  • 場景:酒店系統(tǒng)中房間的狀態(tài)變化:

    • 已預(yù)定: 已預(yù)訂狀態(tài)可以入住,入住后就變成已入住狀態(tài);也可以取消預(yù)訂,取消預(yù)訂后就變成空閑狀態(tài);
    • 已入?。?/strong> 已入住狀態(tài)可以退房,退房后變成空閑狀態(tài);
    • 空閑: 空閑狀態(tài)可以預(yù)訂,預(yù)訂后變成預(yù)訂狀態(tài);也可以入住,入住后變成已入住狀態(tài);
  • 代碼實現(xiàn)

  • 抽象狀態(tài)類(State)

/**
 * 抽象房間狀態(tài) 接口
 */
public interface State {
	void handle();
}
  • 具體狀態(tài)類(ConcreteState)
/**
 * 空閑狀態(tài)
 */
public class FreeState implements State{
	@Override
	public void handle() {
		System.out.println("房間空閑中,可預(yù)訂。。。。。");
	}	
}
/**
 * 已預(yù)定狀態(tài)
 */
public class BookedState implements State{
	@Override
	public void handle() {
		System.out.println("房間已預(yù)訂。。。。。");
	}	
}
/**
 * 已入住狀態(tài)
 */
public class CheckedInState implements State{
	@Override
	public void handle() {
		System.out.println("房間已入住,請勿打擾。。。。。");
	}	
}
  • 環(huán)境類(Context)
/**
 * 環(huán)境類:
 * 房間對象,持有狀態(tài)的引用
 */
public class HomeContext {
	private State state;
	/**
	 * 設(shè)置狀態(tài)。。
	 * @param state
	 */
	public void setState(State state){
		System.out.println("修改狀態(tài)。。");
		this.state=state;
		this.state.handle();		
	}
}
  • 客戶端調(diào)用
public static void main(String[] args) {
	HomeContext hc=new HomeContext();
	hc.setState(new FreeState());
	hc.setState(new BookedState());
	hc.setState(new CheckedInState());
}



更多設(shè)計模式學(xué)習(xí):

??????????設(shè)計模式(1):介紹
??????????設(shè)計模式(2):單例模式
??????????設(shè)計模式(3):工廠模式
??????????設(shè)計模式(4):建造者模式
??????????設(shè)計模式(5):原型模式
??????????設(shè)計模式(6):橋接模式
??????????設(shè)計模式(7):裝飾器模式
??????????設(shè)計模式(8):組合模式
??????????設(shè)計模式(9):外觀模式
??????????設(shè)計模式(10):享元模式
??????????設(shè)計模式(11):適配器模式
??????????設(shè)計模式(12):代理模式
??????????設(shè)計模式(13):模板方法模式
??????????設(shè)計模式(14):命令模式
??????????設(shè)計模式(15):迭代器模式
??????????設(shè)計模式(16):觀察者模式
??????????設(shè)計模式(17):中介者模式
??????????設(shè)計模式持續(xù)更新中…文章來源地址http://www.zghlxwxcb.cn/news/detail-845402.html

到了這里,關(guān)于設(shè)計模式(18):狀態(tài)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Gof23設(shè)計模式之橋接外觀模式

    又名門面模式,是一種通過為多個復(fù)雜的子系統(tǒng)提供一個一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式。該模式對外有一個統(tǒng)一接口,外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)的具體的細(xì)節(jié),這樣會大大降低應(yīng)用程序的復(fù)雜度,提高了程序的可維護(hù)性。 外觀(Facade)模式包含

    2024年02月15日
    瀏覽(22)
  • Gof23設(shè)計模式之建造者模式

    建造者模式(Builder Pattern)又叫生成器模式,是一種對象構(gòu)建模式。它可以將復(fù)雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對象。 建造者模式是一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶只通過指定復(fù)雜對象的類型和

    2024年02月11日
    瀏覽(34)
  • Gof23設(shè)計模式之模板方法模式

    定義一個操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變該算法結(jié)構(gòu)的情況下重定義該算法的某些特定步驟。 模板方法(Template Method)模式包含以下主要角色: 抽象類(Abstract Class):負(fù)責(zé)給出一個算法的輪廓和骨架。它由一個模板方法和若干個

    2024年02月13日
    瀏覽(20)
  • Gof23設(shè)計模式之單例模式(完整)

    單例模式(Singleton pattern)是Java中最簡單的設(shè)計模式之一。這種設(shè)計模式屬于創(chuàng)建型模型,它提供了一種創(chuàng)建對象的最佳方式。 這種模式涉及到一個單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪

    2024年02月10日
    瀏覽(26)
  • GOF 23 種設(shè)計模式應(yīng)用場景分析

    本文看下GOF 23 種設(shè)計模式應(yīng)用場景,詳細(xì)的還是通過文章給出參考鏈接學(xué)習(xí)下。 參考這篇文章 。 有幾種產(chǎn)品需要創(chuàng)建,比如創(chuàng)建紅蘋果,青蘋果,綠蘋果,這些對象通過一個對象就可以。 參考這篇文章 。 有幾種產(chǎn)品需要創(chuàng)建,但是每種產(chǎn)品不能簡單的通過一個對象來表示

    2024年02月16日
    瀏覽(28)
  • 創(chuàng)建型模式 (Creational Patterns) 玄子Share 設(shè)計模式 GOF 全23種 + 七大設(shè)計原則

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NWLAOFtO-1691793071647)(./assets/%E7%8E%84%E5%AD%90Share%20%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%20GOF%20%E5%85%A823%E7%A7%8D%20+%20%E4%B8%83%E5%A4%A7%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.png)] GoF(Gang of Four)是四位計算機科學(xué)家(Erich Gamma、Ri

    2024年02月12日
    瀏覽(28)
  • 【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——狀態(tài)模式State(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——狀態(tài)模式State(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    請編寫程序完成APP抽獎活動具體要求如下: 假如每參加一次這個活動要扣除用戶50積分,中獎概率是10% 獎品數(shù)量固定,抽完就不能抽獎 活動有四個狀態(tài): 可以抽獎、不能抽獎、發(fā)放獎品和獎品領(lǐng)完,活動的四個狀態(tài)轉(zhuǎn)換關(guān)系圖如下 一開始的狀態(tài)為“不能抽獎”,當(dāng)扣除50積分

    2024年02月12日
    瀏覽(29)
  • 設(shè)計模式(18):狀態(tài)模式

    用于解決系統(tǒng)中復(fù)雜對象的狀態(tài)轉(zhuǎn)換以及不同狀態(tài)下行為的封裝問題 環(huán)境類(Context): 環(huán)境類中維護(hù)一個State對象,它定義了當(dāng)前的狀態(tài),并委托當(dāng)前狀態(tài)處理一些請求; 抽象狀態(tài)類(State): 用于封裝對象的一個特定狀態(tài)所對應(yīng)的行為; 具體狀態(tài)類(ConcreteState): 實現(xiàn)了抽象狀態(tài)類

    2024年04月09日
    瀏覽(18)
  • C++設(shè)計模式_18_State 狀態(tài)模式

    State和Memento被歸為“狀態(tài)變化”模式。 在組件構(gòu)建過程中,某些對象的狀態(tài)經(jīng)常面臨變化,如何對這些變化進(jìn)行有效的管理?同時又維持高層模塊的穩(wěn)定?“狀態(tài)變化”模式為這一問題提供了一種解決方案。 State Memento

    2024年02月06日
    瀏覽(18)
  • java 23種設(shè)計模式

    java 23種設(shè)計模式

    1、創(chuàng)建型模式(Creational Patterns) 2、結(jié)構(gòu)型模式(Structural Patterns) 3、行為型模式(Behavioral Patterns) 創(chuàng)建型模式(Creational Patterns): ? ? ? ? 1、工廠方法模式(Factory Method Pattern) ? ? ? ? ? ? ? 1.1、簡單工廠模式(Simple Factory Pattern) ? ? ? ? 2、抽象工廠模式(Abstract

    2024年01月22日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包