日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java描述设计模式(21):状态模式

發布時間:2025/3/16 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java描述设计模式(21):状态模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文源碼:GitHub·點這里 || GitEE·點這里

一、生活場景

1、場景描述

變色龍是爬行動物,是非常奇特的動物,它有適于樹棲生活的種種特征和行為,身體也會隨著環境的變化而變化出適應環境的顏色,非常神奇。下面基于狀態模式對該變化過程進行描述。

2、代碼實現

public class C01_InScene {public static void main(String[] args) {Chameleon chameleon = new Chameleon("紅色","花叢環境") ;LifeContext lifeContext = new LifeContext() ;// 樹葉環境BodyColor bodyColor = new GreenColor ();lifeContext.setBodyColor(bodyColor);lifeContext.change(chameleon);// 樹枝環境bodyColor = new GrayColor() ;lifeContext.setBodyColor(bodyColor);lifeContext.change(chameleon);} } /*** 變色龍*/ class Chameleon {public String color ;public String contextDesc ;public Chameleon(String color, String contextDesc) {this.color = color;this.contextDesc = contextDesc;} } /*** 變色龍生存環境*/ class LifeContext {private BodyColor bodyColor;public void setBodyColor(BodyColor bodyColor) {this.bodyColor = bodyColor;}public void change (Chameleon chameleon){bodyColor.change(chameleon) ;} } /*** 變色龍身體顏色抽象類*/ interface BodyColor {void change (Chameleon chameleon); } /*** 變色龍身體顏色具體類*/ class GreenColor implements BodyColor {@Overridepublic void change(Chameleon chameleon) {System.out.println("變化前:"+chameleon.color+";"+chameleon.contextDesc);chameleon.contextDesc = "樹葉環境" ;chameleon.color = "綠色" ;System.out.println("變化后:"+chameleon.color+";"+chameleon.contextDesc);} } class GrayColor implements BodyColor {@Overridepublic void change(Chameleon chameleon) {System.out.println("變化前:"+chameleon.color+";"+chameleon.contextDesc);chameleon.contextDesc = "樹枝環境" ;chameleon.color = "灰色" ;System.out.println("變化后:"+chameleon.color+";"+chameleon.contextDesc);} }

二、狀態模式

1、基礎概念

狀態模式是對象的行為模式,狀態模式允許一個對象在其內部狀態改變的時候改變其行為。狀態模式把對象的行為封裝在不同狀態的對象中,每一個狀態對象都是抽象狀態類的子類。意圖是讓一個對象在其內部狀態改變的時候,其行為也隨之改變。

2、模式圖解

3、核心角色

  • 環境角色

持有具體狀態類的對象實例。這個具體狀態類的實例給出此環境對象的現有狀態。

  • 抽象狀態角色

定義一個接口,封裝環境對象的狀態所對應的行為。

  • 具體狀態角色

具體狀態類實現了環境的狀態所對應的行為。

4、源碼實現

public class C02_State {public static void main(String[] args){Context context = new Context();State state = new ConcreteStateA() ;context.setState(state);context.printInfo("當前環境狀態A");state = new ConcreteStateB();context.setState(state);context.printInfo("當前環境狀態B");} } /*** 環境角色*/ class Context {private State state;public void setState(State state) {this.state = state;}public void printInfo (String info) {state.stateInfo(info);} } /*** 抽象狀態角色*/ interface State {void stateInfo (String param); } /*** 具體狀態角色*/ class ConcreteStateA implements State {@Overridepublic void stateInfo (String info) {System.out.println("ConcreteStateA:" + info);} } class ConcreteStateB implements State {@Overridepublic void stateInfo (String info) {System.out.println("ConcreteStateB:" + info);} }

三、模式總結

  • 將容易產生問題的if-else語句拆分,狀態模式將每個狀態的行為封裝到對應的一個類中,代碼有很強的可讀性。
  • 符合“開閉原則”,容易增刪操作,管理狀態。
  • 會存在很多狀態時。每個狀態都要一個對應的類,會產生很多類,增加維
    護難度。
  • 應用場景:當一個事件或者對象有很多種狀態,狀態之間會相互轉換,不同的狀態有不同的行為,可以考慮使用狀態模式。
  • 四、源代碼地址

    GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent

    總結

    以上是生活随笔為你收集整理的Java描述设计模式(21):状态模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。