`
dadadada2x
  • 浏览: 9786 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

设计模式之State(状态模式)浅析

 
阅读更多
这个是照着一篇文章实现的ruby版。文章链接
http://blog.csdn.net/shuangde800/article/details/10132825?reload
#encoding: utf-8
class State
  #封装四种动作
  def insertQuarter ;end #投币
  def ejectQuarter ;end  #退币 
  def turnCrank ;end     #转动摇柄
  def dispense ;end      #发糖果
end


#没有投币的状态
class NoQuarterState < State
  def initialize(gumballMachine)
      @gumballMachine = gumballMachine
  end
  
  def insertQuarter
    p "你插入一枚硬币"
    p @gumballMachine.setState(@gumballMachine.getHasQuarterState)
  end
  
  def ejectQuarter
    p "你没有插入任何硬币"
  end
  
  def turnCrank
    p "你转动手柄,但是没有硬币插入"
  end
  
  def dispense
    p "首先你需要付钱"
  end
  
  def toString()
    return "等待插入硬币"
  end
end



#已经投币的状态 
class HasQuarterState < State
  def initialize(gumballMachine)
      @gumballMachine = gumballMachine
  end
  
  def insertQuarter
    p "你不能在插入别的硬币"
  end
  
  def ejectQuarter
    p "硬币吐出"
    @gumballMachine.setState(@gumballMachine.getNoQuarterState);  
  end
  
  def turnCrank
    p "你转动手柄..."
    @gumballMachine.setState(@gumballMachine.getSoldState)
  end
  
  def dispense
    p "没有糖果发放"
  end
  
  def toString()
    return "等待转动手柄"
  end
end


#正在售出的状态
class SoldState < State
  def initialize(gumballMachine)
      @gumballMachine = gumballMachine
  end
  
  def insertQuarter
    p "请等待,将要给你糖果"
  end
  
  def ejectQuarter
    p "对不起,你已经转过手柄"
  end
  
  def turnCrank
    p "转动两次不会给你多余的糖果"
  end
  
  def dispense
    @gumballMachine.releaseBall
    if @gumballMachine.getCount>0
      @gumballMachine.setState(@gumballMachine.getNoQuarterState)
    else
      p "哦no,已经没有糖果了"  
      @gumballMachine.setState(@gumballMachine.getSoldOutState)
    end
  end
  
  def toString()
    return "等待转动手柄"
  end
end


#卖完状态
class SoldOutState < State
  def initialize(gumballMachine)
      @gumballMachine = gumballMachine
  end
  
  def insertQuarter
    p "请等待,将要给你糖果"
    p @gumballMachine
  end
  
  def ejectQuarter
    p "对不起,你已经转过手柄"
  end
  
  def turnCrank
    p "转动两次不会给你多余的糖果,或者糖果卖完了"
  end
  
  def dispense
    p "没有糖果发放"
  end
  
  def toString()
    return "等待转动手柄"
  end
end


class GumballMachine   
   def initialize(numberGumballs)
     @soldOutState = SoldOutState.new(self)
     @noQuarterState = NoQuarterState.new(self)
     @hasQuarterState = HasQuarterState.new(self)  
     @soldState = SoldState.new(self)
     @count = numberGumballs
     if numberGumballs > 0
       @state = @noQuarterState
     end
   end
   
   def insertQuarter
     @state.insertQuarter
   end
   
   def ejectQuarter
     @state.ejectQuarter
   end
   
   def turnCrank
     @state.turnCrank
     @state.dispense  
   end
   
   def setState(state)
     @state=state
   end
   
   def releaseBall
     p "糖果正在给你..."
     if @count!=0
       @count = @count - 1
     end
   end
   
   def getCount
     @count
   end
   
   def refill(count)
     @count = count
     @state = @noQuarterState
   end
   
   def getState
     @state
   end
   
   def getSoldOutState
     @soldOutState
   end
   
   def getNoQuarterState
     @noQuarterState
   end
   
   def getHasQuarterState
     @hasQuarterState
   end
   
   def getSoldState
     @soldState
   end
end


#测试
@test = GumballMachine.new(5)
@test.insertQuarter  
@test.turnCrank  
p @test  
@test.insertQuarter  
@test.turnCrank
@test.insertQuarter  
@test.turnCrank
p @test  
分享到:
评论

相关推荐

    设计模式C++学习之状态模式(State)

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且使代码结构清晰,易于维护。 在C++中,状态模式通常包含以下几个关键...

    设计模式之状态模式(State)

    状态模式是一种行为设计模式,它使对象能够在内部状态改变时改变其行为,看起来好像改变了它的类。这种模式常用于处理对象在不同状态下表现各异的情况,避免了复杂的条件语句,提高了代码的可读性和可维护性。 在...

    设计模式之状态模式(State Pattern)

    状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在状态模式中,一个对象的状态变化会导致其行为的变化,这种变化不是通过改变对象的类来实现的,而是通过改变对象的状态。这个模式的核心是封装可能...

    试谈java设计模式之State.docx

    Java 设计模式之 State 模式 State 模式是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。该模式的主要思想是将对象的状态和行为分离,使用不同的状态子类来实现不同的行为。 何时使用 State 模式...

    设计模式之状态模式State

    状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在状态模式中,一个对象的状态变化可以导致其行为的变化。这种模式常用于当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变其行为的...

    java设计模式之-状态模式-实现

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且在不同的状态下,对象的行为也相应地变化。在Java中,我们可以利用接口、...

    试谈java设计模式之State.pdf

    Java 设计模式之 State 模式详解 State 模式是 Java 设计模式的一种,用于解决状态切换问题。当对象的状态改变时,对象的行为也随之改变。State 模式将状态和行为分离,实现了状态切换的灵活性和可扩展性。 定义:...

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

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在C#编程中,这种模式被广泛应用于处理具有多种状态的对象,使得对象的状态转换更加清晰和易于管理。 状态模式的...

    java 设计模式之状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,看起来好像对象改变了它的类。在Java中,状态模式通常通过定义不同的状态类和一个上下文类来实现,其中上下文类持有状态对象并调用其方法来响应...

    《设计模式》实战---状态模式(State Pattern)

    在《设计模式》实战---状态模式(State Pattern)这篇文章中,作者可能详细探讨了以下关键点: 1. **模式定义**:状态模式允许对象在内部状态改变时改变其行为,对象看起来好像修改了它的类。这通过将每个状态封装...

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

    状态模式在Android编程中是一种非常重要的设计模式,它主要用于处理对象在不同状态下的不同行为。状态模式的核心思想是将每一种状态封装成一个类,使得对象可以在运行时根据其内部状态的变化来改变其行为。 一、...

    java设计模式之State.docx

    Java设计模式中的State模式是一种行为设计模式,它允许对象在其内部状态改变时改变它的行为。State模式的核心思想是将状态相关的代码封装到独立的对象中,这样可以使得对象在其状态改变时,表现出不同的行为,而无需...

    JAVA设计模式chm文档

    创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder ...设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor

    Java设计模式 设计模式介绍

    章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor

    设计模式之状态模式Java版本实现

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且根据不同的状态,对象的行为也相应地变化。 在Java中实现状态模式,我们...

    java设计模式之State.pdf

    State模式是一种行为设计模式,它的主要目的是将状态与行为封装在一起,使得对象在状态改变时,其行为也随之改变。在Java中,State模式通常通过创建一系列的子类来表示不同的状态,并让每个子类实现特定状态下的行为...

    轻松掌握state设计模式

    ### State设计模式详解 #### 一、State模式的定义与概念 State模式是一种行为型设计模式,用于在不改变对象自身的情况下改变其行为。它的核心思想是:通过引入一系列的具体状态类来表示对象的不同状态,并将这些...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    设计模式之状态模式实例

    在这个Java实现的"设计模式之状态模式实例"中,我们可以通过运行`StatePatternDemo`来观察状态模式的实际效果,演示如何在不同状态下,自动售货机如何响应用户操作。这个例子将帮助我们更好地理解和运用状态模式,...

Global site tag (gtag.js) - Google Analytics