`

状态模式State根据状态来分离和选择行为

阅读更多
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。

状态决定行为。

public interface VoteState {
  public void vote(String user,String voteItem,VoteManager voteManager);
}

public class NormalVoteState implements VoteState {
  public void vote(String user,String voteItem,VoteManager voteManager){
    voteManager.getMapVote().put(user, voteItem);
  }
}

public class RepeatVoteState implements VoteState {
  public void vote(String user,String voteItem,VoteManager voteManager){
   
  }
}

public class SpiteVoteState implements VoteState {
  public void vote(String user,String voteItem,VoteManager voteManager){
    String s = voteManager.getMapVote().get(user);
    if(s != null) {
      voteManager.getMapVote().remove(user);
    }
  }
}

public class BlackVoteState implements VoteState {
  public void vote(String user,String voteItem,VoteManager voteManager){
   
  }
}

public class VoteManager {
  private VoteState state = null;

  private Map<String, String> mapVote = new HashMap<String, String>();

  private Map<String, Integer> mapVoteCount = new HashMap<String, Integer>();

  public Map<String, String> getMapVote() {
    return mapVote;
  }

  public void vote(String user, String voteItem) {
    Integer oldVoteCount = mapVoteCount.get(user);
    if(oldVoteCount == null) {
      oldVoteCount = 0;
    }
    oldVoteCount += 1;
    mapVoteCount.put(user, oldVoteCount);
   
    if(oldVoteCount == 1) {
      state = new NormalVoteState();
    } else if(oldVoteCount > 1 && oldVoteCount < 5) {
      state = new RepeatVoteState();
    } else if(oldVoteCount >= 5 && oldVoteCount < {
      state = new SpiteVoteState();
    } else if(oldVoteCount >= {
      state = new BlackVoteState();
    }
    state.vote(user, voteItem,this);
  }
}

客户端代码:
VoteManager vm = new VoteManager();
for(int i = 0;i < 8;i++) {
  vm.vote("ul","A");
}
分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式

    标题和描述均提到了"C#面向对象设计模式"中的State状态模式,这表明文章的核心内容是围绕State模式在C#编程语言中的应用展开。State模式是一种行为设计模式,旨在允许对象在其内部状态改变时,其行为也能相应地改变...

    Android编程设计模式之状态模式详解

    状态模式的核心思想是将每一种状态封装成一个类,使得对象可以在运行时根据其内部状态的变化来改变其行为。 一、状态模式的概念 状态模式是一种行为设计模式,它的主要特点是对象的行为取决于其当前的状态。在状态...

    设计模式-状态模式分享ppt

    我们可以使用状态模式来处理订单的状态转换,例如从新建到已支付的过程,这样可以清晰地分离出每种状态下的业务逻辑,减少复杂的条件判断。 #### 九、状态模式的优缺点 - **优点**: - 降低对象之间的耦合度。 - ...

    PHP - 状态模式例子

    状态模式是一种行为设计模式,...通过将行为与状态分离,我们可以更好地封装和管理对象的行为变化,同时保持了代码的可扩展性。在实际项目中,尤其是在处理有多种状态变化的对象时,状态模式是一个非常实用的设计模式。

    C++设计模式课件18_State_状态模式.pdf

    简单来说,状态模式通过将对象的行为与状态分离,从而实现了行为的动态改变。这种模式的主要优点在于能够简化对象的状态管理,并使代码更易于理解和维护。 #### 三、状态模式的基本结构 状态模式主要包含以下几个...

    Java 23种设计模式24状态模式.pdf

    在状态模式中,通过分离状态和行为,可以更容易地管理和扩展系统。例如,当需要添加新的状态时,只需要新增具体状态类即可,无需修改现有代码。同时,状态之间的转换也变得更加清晰和可控,因为每个状态类都清楚地...

    试谈java设计模式之State.docx

    该模式的主要思想是将对象的状态和行为分离,使用不同的状态子类来实现不同的行为。 何时使用 State 模式?State 模式在实际使用中非常多,特别是在状态切换的场景中。如果我们经常使用 If-Else 语句来判断状态并...

    state模式

    3. 如果有许多相关的类,它们之间的区别仅在于行为随状态的变化而变化,可以使用State模式将这些类中的行为分离出来。 在实现State模式时,有几点需要注意: 1. 不要过度使用:虽然State模式可以很好地解耦状态...

    试谈java设计模式之State.pdf

    State 模式将状态和行为分离,实现了状态切换的灵活性和可扩展性。 定义:State 模式的定义是:不同的状态,不同的行为;或者说,每个状态有着相应的行为。何时使用?State 模式在实际使用中比较多,适合"状态的...

    状态模式ppt

    通过将状态与行为分离,状态模式使得代码更易于理解和维护。然而,需要注意的是,不恰当的应用可能会导致代码变得复杂和难以维护。因此,在选择是否使用状态模式时,需要权衡其带来的好处与可能引入的复杂性。

    状态模式Java实现示例

    状态模式(State Pattern)是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。这个对象看起来好像修改了它的类。状态模式主要解决的是当一个对象的行为依赖于它的状态时,如何将这些状态从对象中...

    State模式

    在软件工程中,当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变其行为时,State模式是非常有用的。 在State模式中,我们定义了一个表示各种状态的对象类和一个行为接口。每个状态类都实现了这个...

    python 实现 状态模式

    总结起来,Python中的状态模式提供了一种结构化的方式来处理对象状态的变化,通过分离状态行为和对象本身,使得代码更加模块化和易于扩展。不同的实现方式体现了Python语言的灵活性,可以根据项目需求选择最适合的...

    C++ State模式

    State模式的核心思想是将状态转换的逻辑从Context对象中解耦出来,使得Context对象不再需要关心如何根据内部状态来改变行为,而是将这些细节交给State对象处理。这样做的好处包括: - **降低复杂性**: 将状态相关的...

    服务器状态监控-状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为,使对象看起来好像改变了它的类。在服务器监控的上下文中,我们可以将这一模式应用到各种组件的状态检测和管理中。 首先,让我们理解什么是...

    java常用设计模式-状态模式

    状态模式将状态封装成独立的类,并将请求委托给当前状态对象,从而实现状态的切换和状态行为的变化。 状态模式的优点: * 可以将状态和行为分离,使得对象的行为可以随着状态的改变而改变,从而实现更加灵活的设计...

    状态模式学习

    1. **分离状态相关的代码**:状态模式将每种状态的行为封装在独立的类中,这有助于保持代码结构清晰,降低复杂度。 2. **易于扩展**:添加新的状态或转换只需添加新的具体状态类和适当的状态转换代码,不需修改已有...

    设计模式状态模式PPT学习教案.pptx

    1. 状态模式可以使得系统中的对象能够根据不同的状态表现出不同的行为,提高了系统的灵活性和可维护性。 2. 状态模式可以使得客户端代码与状态对象的实现细节分离,提高了系统的可扩展性和可维护性。 3. 状态模式...

    设计模式之:状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得对象的行为与其状态紧密相关,而状态之间的转换则通过上下文对象来实现。...

Global site tag (gtag.js) - Google Analytics