本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分,在其中我将提供有关需要应用该模式的情况,它所具有的利弊以及用法示例的信息。
有时,当对象的内部状态更改时,您需要更改其行为。 State设计模式允许执行此操作。 您可以通过创建代表不同状态和功能的单独类来获得此功能。 当然,这些类必须从一个抽象类继承或实现一个接口。
当我们需要在运行时通过输入某些State基类的不同子类来更改对象的状态时,可以使用State设计模式。 这种情况同时是有利和不利的,因为我们有明确的,独立的州类别,并具有一定的逻辑,而另一方面,类别的数量却在增加。
让我们考虑这个例子。 每年有四个季节:冬季,Spring,夏季和秋季。每个季节都有其自己的顺序,例如,Spring在冬季之后,夏季在Spring之后等等。
季节的基本状态界面:
- public interface Season {
- public void theSeason(SeasonContext context);
- }
实现Season接口的状态类:
- public class Winter implements Season {
-
- @Override
- public void theSeason(SeasonContext context) {
- System.out.println("Winter is now.");
- context.setSeason(new Spring());
- }
-
- }
Spring班:
- public class Spring implements Season {
-
- @Override
- public 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);
- }
- }
所有这些内容都显示了状态模式的体系结构:基本状态接口,实现状态接口和状态上下文的类。 现在让我们看看它是如何工作的:
- ...
- 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.
翻译自: https://www.javacodegeeks.com/2013/07/design-patterns-state.html