亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

23種設計模式(22)java狀態模式

2024-07-13 10:17:24
字體:
來源:轉載
供稿:網友

一、概述

當系統中某個對象存在多個狀態,這些狀態之間可以進行轉換,而且對象在不同狀態下行為不相同時可以使用狀態模式。狀態模式將一個對象的狀態從該對象中分離出來,封裝到專門的狀態類中,使得對象狀態可以靈活變化。狀態模式是一種對象行為型模式。

二、適用場景

用于解決系統中復雜對象的多種狀態轉換以及不同狀態下行為的封裝問題。簡單說就是處理對象的多種狀態及其相互轉換。

三、UML類圖

java,狀態模式

四、參與者

1)、AbstractState(抽象狀態類):

        在抽象狀態類中定義申明了不同狀態下的行為抽象方法,而由子類(不同的狀態子類)中實現不同的行為操作。

2)、ConcreteState(實現具體狀態下行為的狀態子類):

        抽象狀態類的子類,每一個子類實現一個與環境類(Context)的一個狀態相關的行為,每一個具體的狀態類對應環境的一種具體狀態,不同的具體狀態其行為有所不同。

3)、Context(擁有狀態對象的環境類):

        擁有狀態屬性,因環境的多樣性,它可擁有不同的狀態,且在不同狀態下行為也不一樣。在環境類中維護一個抽象的狀態實例,這個實例定義當前環境的狀態(setState()方法),而將具體的狀態行為分離出來由不同的狀態子類去完成。

五、用例學習

1、抽象狀態類:State.java

/** * JAVA設計模式之 狀態模式 * 抽象狀態類 * @author lvzb.software@qq.com * */ public abstract class State {   /**   * 狀態行為抽象方法,由具體的狀態子類去實現不同的行為邏輯   */   public abstract void Behavior();  }

2、具體狀態子類A:ConcreteStateA.java

/** * 具體的狀態子類A * @author lvzb.software@qq.com */ public class ConcreteStateA extends State {    @Override   public void Behavior() {     // 狀態A 的業務行為, 及當為該狀態下時,能干什么      // 如:手機在未欠費停機狀態下, 能正常撥打電話     System.out.println("手機在未欠費停機狀態下, 能正常撥打電話");   }  }

3、具體狀態子類B:ConcreteStateB.java

/** * 具體的狀態子類B * @author lvzb.software@qq.com * */ public class ConcreteStateB extends State {    @Override   public void Behavior() {     // 狀態B 的業務行為, 及當為該狀態下時,能干什么     // 如:手機在欠費停機狀態下, 不 能撥打電話     System.out.println("手機在欠費停機狀態下, 不能撥打電話");   }  }

4、擁有狀態對象的環境類:Context.java

/** * 環境/上下文類<br/> * 擁有狀態對象,且可以完成狀態間的轉換 [狀態的改變/切換 在環境類中實現] * @author lvzb.software@qq.com * */ public class Context {   // 維護一個抽象狀態對象的引用   private State state;      /*   * 模擬手機的話費屬性<br/>   * 環境狀態如下:   * 1>、當 bill >= 0.00$ : 狀態正常  還能撥打電話   * 2>、當 bill < 0.00$ : 手機欠費  不能撥打電話   */   private double bill;      /**   * 環境處理函數,調用狀態實例行為 完成業務邏輯<br/>   * 根據不同的狀態實例引用 在不同狀態下處理不同的行為   */   public void Handle(){     checkState();     state.Behavior();   }         /**   * 檢查環境狀態:狀態的改變/切換 在環境類中實現   */   private void checkState(){     if(bill >= 0.00){       setState(new ConcreteStateA());     } else {       setState(new ConcreteStateB());     }   }         /**   * 設置環境狀態<br/>   * 私有方法,目的是 讓環境的狀態由系統環境自身來控制/切換,外部使用者無需關心環境內部的狀態   * @param state   */   private void setState(State state){     this.state = state;   }     public double getBill() {     return bill;   }    public void setBill(double bill) {     this.bill = bill;   } }

5、測試客戶端調用類:Client.java

public class Client {    public static void main(String[] args) {     Context context = new Context();     context.setBill(5.50);     System.out.println("當前話費余額:" + context.getBill() + "$");     context.Handle();          context.setBill(-1.50);     System.out.println("當前話費余額:" + context.getBill() + "$");     context.Handle();          context.setBill(50.00);     System.out.println("當前話費余額:" + context.getBill() + "$");     context.Handle();   } }

6、程序運行結果:

當前話費余額:5.5$ 
手機在未欠費停機狀態下, 能正常撥打電話 
當前話費余額:-1.5$ 
手機在欠費停機狀態下, 不能撥打電話 
當前話費余額:50.0$ 
手機在未欠費停機狀態下, 能正常撥打電話

六、擴展 

狀態模式中 關于狀態的切換有兩種不同的實現方式

方式一:狀態的改變/切換  在環境類中實現。  如上面的用例代碼Context類中的checkState()方法。

/**   * 檢查環境狀態:狀態的改變/切換 在環境類中實現   */   private void checkState(){     if(bill >= 0.00){       setState(new ConcreteStateA());     } else {       setState(new ConcreteStateB());     }   }

方式二:狀態的改變/切換  在具體的狀態子類中實現。

實現步驟如下:

1)、在環境類Context類中 初始化一個狀態實例對象,并將環境Context對象作為子類狀態的構造參數傳遞到具體的狀態子類實例中。

如在Context.java類中

// 設置初始狀態 this.state = new ConcreteStateA(this);

2)、 在具體的子類狀態類中根據構造進來的context對象,通過調用context對象的屬性值進行業務邏輯判斷 進行狀態的檢查和切換。

如在 具體的狀態子類ConcreteStateA.java類中:

/** * 具體的狀態子類A * @author lvzb.software@qq.com */ public class ConcreteStateA extends State {   private Context ctx;      public ConcreteStateA(Context context){     ctx = context;   }      @Override   public void Behavior() {     // 狀態A 的業務行為, 及當為該狀態下時,能干什么      // 如:手機在未欠費停機狀態下, 能正常撥打電話     System.out.println("手機在未欠費停機狀態下, 能正常撥打電話");     checkState();        }    /**   * 檢查狀態 是否需要進行狀態的轉換<br/>   * 狀態的切換由具體狀態子類中實現   */   private void checkState(){     if (ctx.getBill() < 0.00) {       ctx.setState(new ConcreteStateB(ctx));     }   } }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国产美女在线观看| 国产亚洲精品va在线观看| 欧美电影院免费观看| 日韩不卡中文字幕| 精品国产一区二区三区四区在线观看| 91久久精品国产91久久| 国产精品扒开腿做爽爽爽男男| 97精品视频在线播放| 亚洲第一页自拍| 国内精品国产三级国产在线专| 91在线视频九色| 精品久久久视频| 国产精品一区久久久| 亚洲www在线| 57pao成人国产永久免费| 亚洲色图13p| 成人黄色中文字幕| 久久精品国产一区二区电影| 一本大道香蕉久在线播放29| 欧美老妇交乱视频| 亚洲自拍偷拍在线| 奇米成人av国产一区二区三区| 欧美性受xxx| 日韩精品极品视频免费观看| 日韩美女写真福利在线观看| 成人黄色免费片| 亚洲qvod图片区电影| 91精品国产91久久久久久吃药| 97视频免费观看| 欧美日本高清视频| 欧美日本高清一区| 91超碰caoporn97人人| 久久久久久久亚洲精品| 九九热精品视频在线播放| 7m精品福利视频导航| 青草青草久热精品视频在线网站| 伊人久久久久久久久久久久久| 欧美色道久久88综合亚洲精品| 欧美激情aaaa| 91精品国产综合久久香蕉的用户体验| 91精品久久久久久久| 91九色视频导航| 91视频国产精品| x99av成人免费| 久久精品99无色码中文字幕| 亚洲成人激情视频| 久久久国产一区二区| 一个人看的www欧美| 2019中文字幕在线观看| 国产精品视频一区国模私拍| 亚洲欧美中文日韩v在线观看| 国产视频精品xxxx| 欧美色另类天堂2015| 久久久99久久精品女同性| 国产精品网站入口| 亚洲欧美一区二区精品久久久| 欧洲亚洲妇女av| 国产亚洲一区二区在线| 日韩av一区二区在线观看| 欧美乱妇高清无乱码| 日韩在线小视频| 久久久国产精彩视频美女艺术照福利| 久久精品色欧美aⅴ一区二区| 国产丝袜视频一区| 日韩av电影中文字幕| 日韩中文字幕在线免费观看| 久久久国产成人精品| 欧美黑人视频一区| 欧美一级高清免费播放| 91午夜理伦私人影院| 国产精品v片在线观看不卡| 欧美一级在线播放| 亚洲免费高清视频| 亚洲综合成人婷婷小说| 欧美午夜www高清视频| 国产精品mp4| 丝袜美腿亚洲一区二区| 国产不卡视频在线| 国产亚洲精品综合一区91| 国产欧美亚洲视频| 欧美伦理91i| 国产精品高潮在线| 欧美精品在线免费播放| 国产精品香蕉av| 国产亚洲欧洲高清一区| 久久免费精品日本久久中文字幕| 国产一区二区三区视频免费| 国产热re99久久6国产精品| 国产69精品99久久久久久宅男| 精品女同一区二区三区在线播放| 国产精品白嫩初高中害羞小美女| 青草青草久热精品视频在线网站| 亚洲精品国产成人| 麻豆一区二区在线观看| 成人自拍性视频| 亚洲图中文字幕| 色妞一区二区三区| 5566日本婷婷色中文字幕97| 国模私拍一区二区三区| 日韩网站在线观看| 亚洲香蕉成视频在线观看| 亚洲精品美女久久久久| 亚洲片国产一区一级在线观看| 日韩精品在线电影| 亚洲美女在线视频| 欧美精品电影免费在线观看| 色哟哟入口国产精品| 亚洲欧美日本精品| 亚洲乱码国产乱码精品精天堂| 色婷婷综合久久久久中文字幕1| 日韩欧美精品在线观看| 91免费在线视频| 韩国日本不卡在线| 精品中文字幕在线| 综合久久五月天| 日韩成人中文字幕在线观看| 亚洲国产精品久久久久秋霞不卡| 色综合导航网站| 免费不卡欧美自拍视频| 欧美极品xxxx| 国产视频综合在线| 亚洲国产精品热久久| 国产亚洲精品久久久久久牛牛| 久久久精品国产一区二区| 国产成+人+综合+亚洲欧洲| 97超碰国产精品女人人人爽| 懂色av中文一区二区三区天美| 欧美一级在线播放| 欧美一区二区大胆人体摄影专业网站| 日韩免费高清在线观看| 欧美在线不卡区| 性夜试看影院91社区| 日韩av在线网址| 亚洲黄色有码视频| 国产女精品视频网站免费| 91精品国产成人www| 亚洲国产日韩欧美综合久久| 欧美高清在线观看| 精品视频中文字幕| 亚洲欧美国产日韩天堂区| 欧美夫妻性生活xx| 日韩在线小视频| 国产精品99久久久久久久久| 国语自产精品视频在线看抢先版图片| 亚洲欧美精品suv| 4k岛国日韩精品**专区| 欧美裸体xxxxx| 亚洲bt欧美bt日本bt| 懂色av影视一区二区三区| 精品视频在线播放免| 色综合久久中文字幕综合网小说| 久久精品国产精品亚洲| 亚洲少妇中文在线| 色婷婷久久av| 亚洲第一免费网站| 国内精品一区二区三区| 欧美在线影院在线视频| 自拍偷拍亚洲欧美| 亚洲欧洲一区二区三区久久| 精品偷拍一区二区三区在线看| 欧美成人亚洲成人| 精品免费在线观看| 欧美日韩亚洲成人| 色综合男人天堂|