Java描述设计模式(21):状态模式
本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
一、生活場(chǎng)景
1、場(chǎng)景描述
變色龍是爬行動(dòng)物,是非常奇特的動(dòng)物,它有適于樹棲生活的種種特征和行為,身體也會(huì)隨著環(huán)境的變化而變化出適應(yīng)環(huán)境的顏色,非常神奇。下面基于狀態(tài)模式對(duì)該變化過程進(jìn)行描述。
2、代碼實(shí)現(xiàn)
public class C01_InScene {public static void main(String[] args) {Chameleon chameleon = new Chameleon("紅色","花叢環(huán)境") ;LifeContext lifeContext = new LifeContext() ;// 樹葉環(huán)境BodyColor bodyColor = new GreenColor ();lifeContext.setBodyColor(bodyColor);lifeContext.change(chameleon);// 樹枝環(huán)境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;} } /*** 變色龍生存環(huán)境*/ 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 = "樹葉環(huán)境" ;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 = "樹枝環(huán)境" ;chameleon.color = "灰色" ;System.out.println("變化后:"+chameleon.color+";"+chameleon.contextDesc);} }二、狀態(tài)模式
1、基礎(chǔ)概念
狀態(tài)模式是對(duì)象的行為模式,狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變其行為。狀態(tài)模式把對(duì)象的行為封裝在不同狀態(tài)的對(duì)象中,每一個(gè)狀態(tài)對(duì)象都是抽象狀態(tài)類的子類。意圖是讓一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候,其行為也隨之改變。
2、模式圖解
3、核心角色
- 環(huán)境角色
持有具體狀態(tài)類的對(duì)象實(shí)例。這個(gè)具體狀態(tài)類的實(shí)例給出此環(huán)境對(duì)象的現(xiàn)有狀態(tài)。
- 抽象狀態(tài)角色
定義一個(gè)接口,封裝環(huán)境對(duì)象的狀態(tài)所對(duì)應(yīng)的行為。
- 具體狀態(tài)角色
具體狀態(tài)類實(shí)現(xiàn)了環(huán)境的狀態(tài)所對(duì)應(yīng)的行為。
4、源碼實(shí)現(xiàn)
public class C02_State {public static void main(String[] args){Context context = new Context();State state = new ConcreteStateA() ;context.setState(state);context.printInfo("當(dāng)前環(huán)境狀態(tài)A");state = new ConcreteStateB();context.setState(state);context.printInfo("當(dāng)前環(huán)境狀態(tài)B");} } /*** 環(huán)境角色*/ class Context {private State state;public void setState(State state) {this.state = state;}public void printInfo (String info) {state.stateInfo(info);} } /*** 抽象狀態(tài)角色*/ interface State {void stateInfo (String param); } /*** 具體狀態(tài)角色*/ 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);} }三、模式總結(jié)
護(hù)難度。
四、源代碼地址
GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent總結(jié)
以上是生活随笔為你收集整理的Java描述设计模式(21):状态模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective C# 原则1:尽可能
- 下一篇: java美元兑换,(Java实现) 美元