状态模式 设计模式
本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分,在其中我将提供有关需要应用该模式的情况,它所具有的利弊以及用法示例的信息。
有时,当对象的内部状态更改时,您需要更改其行为。 State设计模式允许执行此操作。 您可以通过创建代表不同状态和功能的单独类来获得此功能。 当然,这些类必须从一个抽象类继承或实现一个接口。
当需要在运行时通过输入某些State基类的不同子类来更改对象的状态时,可以使用State设计模式。 这种情况同时是有利和不利的,因为我们有明确的,独立的州类别,并带有某种逻辑,而另一方面,类别的数量却在增加。
让我们考虑这个例子。 每年有四个季节:冬天,春天,夏天和秋天。每个季节都有其自己的顺序,例如春天在冬天之后,夏天在春天之后等等。
季节的基本状态界面:
public interface Season {public void theSeason(SeasonContext context);
}
实现Season接口的状态类:
public class Winter implements Season {@Overridepublic void theSeason(SeasonContext context) {System.out.println("Winter is now.");context.setSeason(new Spring());}}
Spring班:
public class Spring implements Season {@Overridepublic void theSeason(SeasonContext context) {System.out.println("Spring is now");context.setSeason(new Summer());}}
我将省略夏季和秋季的课程,因为它们与以前的课程相同。
SeasonContext类:
public class SeasonContext {private Season season;public SeasonContext() {this.season = new Winter();}public void setSeason(Season season) {this.season = season;}public void whatTheSaeson() {season.theSeason(this);}
}
所有这些东西都显示了State模式的体系结构:基本状态接口,实现状态接口和状态上下文的类。 现在让我们看看它是如何工作的:
...public static void main(String[] args) {SeasonContext sc = new SeasonContext();sc.whatTheSaeson();sc.whatTheSaeson();sc.whatTheSaeson();sc.whatTheSaeson();}
...
结果将是:
Winter is now.
Spting is now
Summer is now.
Autumn is now.
参考: 设计模式:在Fruzenshtein的注释博客中,来自我们JCG合作伙伴 Alexey Zvolinskiy的陈述 。
翻译自: https://www.javacodegeeks.com/2013/07/design-patterns-state.html
状态模式 设计模式