当前位置:   article > 正文

设计模式:状态

设计模式:状态

本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分,在其中我将提供有关需要应用该模式的情况,它所具有的利弊以及用法示例的信息。 java-design-patterns

有时,当对象的内部状态更改时,您需要更改其行为。 State设计模式允许执行此操作。 您可以通过创建代表不同状态和功能的单独类来获得此功能。 当然,这些类必须从一个抽象类继承或实现一个接口。

当我们需要在运行时通过输入某些State基类的不同子类来更改对象的状态时,可以使用State设计模式。 这种情况同时是有利和不利的,因为我们有明确的,独立的州类别,并具有一定的逻辑,而另一方面,类别的数量却在增加。

让我们考虑这个例子。 每年有四个季节:冬季,Spring,夏季和秋季。每个季节都有其自己的顺序,例如,Spring在冬季之后,夏季在Spring之后等等。

季节的基本状态界面:
  1. public interface Season {
  2. public void theSeason(SeasonContext context);
  3. }

策略设计模式

实现Season接口的状态类:
  1. public class Winter implements Season {
  2. @Override
  3. public void theSeason(SeasonContext context) {
  4. System.out.println("Winter is now.");
  5. context.setSeason(new Spring());
  6. }
  7. }
Spring班:
  1. public class Spring implements Season {
  2. @Override
  3. public void theSeason(SeasonContext context) {
  4. System.out.println("Spring is now");
  5. context.setSeason(new Summer());
  6. }
  7. }

我将省略夏季和秋季的课程,因为它们与以前的课程相同。

SeasonContext类:
  1. public class SeasonContext {
  2. private Season season;
  3. public SeasonContext() {
  4. this.season = new Winter();
  5. }
  6. public void setSeason(Season season) {
  7. this.season = season;
  8. }
  9. public void whatTheSaeson() {
  10. season.theSeason(this);
  11. }
  12. }

所有这些内容都显示了状态模式的体系结构:基本状态接口,实现状态接口和状态上下文的类。 现在让我们看看它是如何工作的:

  1. ...
  2. public static void main(String[] args) {
  3. SeasonContext sc = new SeasonContext();
  4. sc.whatTheSaeson();
  5. sc.whatTheSaeson();
  6. sc.whatTheSaeson();
  7. sc.whatTheSaeson();
  8. }
  9. ...

结果将是:

  1. Winter is now.
  2. Spting is now
  3. Summer is now.
  4. Autumn is now.

参考: 设计模式:Fruzenshtein的注释博客中,来自我们JCG合作伙伴 Alexey Zvolinskiy的陈述

翻译自: https://www.javacodegeeks.com/2013/07/design-patterns-state.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/696498
推荐阅读
相关标签
  

闽ICP备14008679号