设计模式-状态机模式





糖果机的状态:

public interface State

{

public void InsertQuarter();

public void ejectQuarter();

public void turnCrank();

public void dispense();

}

public class NoQuarterState implements State

{

GumballMachine gumballMachine;

public NoQuarterState (GumballMachine gumballMachine)

{

this.gumballMachine = gumballMachine;

}

public void insertQuarter()

{

System.out.println("You Insert a quarter");

gumballMachine.setState(gumballMachine.getHasQuarterState());

}


}

public class HasQuarterState implements State

{

GumballMachine gumballMachine;

public HasQuarterState (GumballMachine gumballMachine)

{

this.gumballMachine = gumballMachine;

}


public void ejectQuarter()

{

System.out.println("Quarter returned");

gumballMachine.setState(gumballMachine.getNoQuarterState());

}

public void turnCrank()

{

System.out.println("You turned...");

gumballMachine.setState(gumballMachine.getSoldState());

}

}

public class SoldState implements State

{

GumballMachine gumballMachine;

public HasQuarterState (GumballMachine gumballMachine)

{

this.gumballMachine = gumballMachine;

}

public void dispense()

{

gumballMachine.releaseBall();

if(gumballMachine.getCount() > 0)

{

gumballMachine.setState(gumballMachine.getNoQuarterState());

}else 

{

System.out.println("Oops,out of gumballs!");

gumballMachine.setState(gumballMachine.getSoldOutState());

}

}

}

public class SoldOutState implements State

{

GumballMachine gumballMachine;

public HasQuarterState (GumballMachine gumballMachine)

{

this.gumballMachine = gumballMachine;

}


}



糖果机:

public class GumballMachine

{

State soldOutState;

State noQuarterState;

State hasQuarterState;

State soldState;

State state = soldOutState;

int count = 0;

public GumballMachine(int numberGumballs)

{

soldOutState = new SoldOutState(this);

noQuarterState= newNoQuarterState(this);

hasQuarterState= newHasQuarterState(this);

soldState= new SoldState(this);

this.count = numberGumballs;

if(numberGumballs > 0)

{

state = noQuarterState;

}

}

public void insertQuarter()

{

state.insertQuarter();

}

public void ejectQuarter()

{

state.ejectQuarter();

}

public void turnCrank()

{

state.turnCrank();

state.dispense();

}

void setState(State state)

{

this.state = state;

}

void releaseBall()

{

System.out.println("A gumball comes rolling out the slot...");

if(count != 0)

count = count - 1;

}

//这里有更多的方法,其中包括每一个状态的getter.....

}


向糖果机公司的CEO展示:

public class GumballMachineTestDrive

{

public static void main(String[] args)

{

GumballMachine gumballMachine = new GumballMachine(5);

System.out.println(gumballMachine);


gumballMachine.InsertQuarter();

gumballMachine.turnCrank();

System.out.println(gumballMachine);


gumballMachine.InsertQuarter();

gumballMachine.turnCrank();

gumballMachine.InsertQuarter();

gumballMachine.turnCrank();

System.out.println(gumballMachine);

}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值