这个是照着一篇文章实现的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++中,状态模式通常包含以下几个关键...
状态模式是一种行为设计模式,它使对象能够在内部状态改变时改变其行为,看起来好像改变了它的类。这种模式常用于处理对象在不同状态下表现各异的情况,避免了复杂的条件语句,提高了代码的可读性和可维护性。 在...
状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在状态模式中,一个对象的状态变化会导致其行为的变化,这种变化不是通过改变对象的类来实现的,而是通过改变对象的状态。这个模式的核心是封装可能...
Java 设计模式之 State 模式 State 模式是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。该模式的主要思想是将对象的状态和行为分离,使用不同的状态子类来实现不同的行为。 何时使用 State 模式...
状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在状态模式中,一个对象的状态变化可以导致其行为的变化。这种模式常用于当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变其行为的...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且在不同的状态下,对象的行为也相应地变化。在Java中,我们可以利用接口、...
Java 设计模式之 State 模式详解 State 模式是 Java 设计模式的一种,用于解决状态切换问题。当对象的状态改变时,对象的行为也随之改变。State 模式将状态和行为分离,实现了状态切换的灵活性和可扩展性。 定义:...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在C#编程中,这种模式被广泛应用于处理具有多种状态的对象,使得对象的状态转换更加清晰和易于管理。 状态模式的...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,看起来好像对象改变了它的类。在Java中,状态模式通常通过定义不同的状态类和一个上下文类来实现,其中上下文类持有状态对象并调用其方法来响应...
在《设计模式》实战---状态模式(State Pattern)这篇文章中,作者可能详细探讨了以下关键点: 1. **模式定义**:状态模式允许对象在内部状态改变时改变其行为,对象看起来好像修改了它的类。这通过将每个状态封装...
状态模式在Android编程中是一种非常重要的设计模式,它主要用于处理对象在不同状态下的不同行为。状态模式的核心思想是将每一种状态封装成一个类,使得对象可以在运行时根据其内部状态的变化来改变其行为。 一、...
Java设计模式中的State模式是一种行为设计模式,它允许对象在其内部状态改变时改变它的行为。State模式的核心思想是将状态相关的代码封装到独立的对象中,这样可以使得对象在其状态改变时,表现出不同的行为,而无需...
创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder ...设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,并且根据不同的状态,对象的行为也相应地变化。 在Java中实现状态模式,我们...
State模式是一种行为设计模式,它的主要目的是将状态与行为封装在一起,使得对象在状态改变时,其行为也随之改变。在Java中,State模式通常通过创建一系列的子类来表示不同的状态,并让每个子类实现特定状态下的行为...
### State设计模式详解 #### 一、State模式的定义与概念 State模式是一种行为型设计模式,用于在不改变对象自身的情况下改变其行为。它的核心思想是:通过引入一系列的具体状态类来表示对象的不同状态,并将这些...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
在这个Java实现的"设计模式之状态模式实例"中,我们可以通过运行`StatePatternDemo`来观察状态模式的实际效果,演示如何在不同状态下,自动售货机如何响应用户操作。这个例子将帮助我们更好地理解和运用状态模式,...