Java描述设计模式(21):状态模式
生活随笔
收集整理的這篇文章主要介紹了
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);} }三、模式總結
護難度。
四、源代碼地址
GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent總結
以上是生活随笔為你收集整理的Java描述设计模式(21):状态模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective C# 原则1:尽可能
- 下一篇: Java并发编程(07):Fork/Jo