状态模式

状态模式的定义:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。将状态封装成为独立的类,并将动作委托到代表当前状态的对象。

状态接口:

1 public interface State {
2     public void insertQuarter();
3     
4     public void ejectQuarter();
5     
6     public void turnCrank();
7     
8     public void dispense();
9 }

实现一个状态类:

public class NoQuarterState implements State {
    GumballMachine gumballMachine;//拥有状态的事物的引用
    
    public NoQuarterState(GumballMachine gumballMachine){
        this.gumballMachine = gumballMachine;
    }
    @Override
    public void insertQuarter() {
        System.out.println("You inserted a quarter!");
        gumballMachine.setState(gumballMachine.getHasQuarterState());
    }

    @Override
    public void ejectQuarter() {
        System.out.println("You haven't insert a quarter");
    }

    @Override
    public void turnCrank() {
        System.out.println("You turned, but there's no quarter");
    }

    @Override
    public void dispense() {
        System.out.println("You need to pay first");
    }

}

拥有状态的事物类:

 1 public class GumballMachine {
 2 
 3     State  soldOutState;
 4     State noQuarterState;
 5     State hasQuarterState;
 6     State soldState;
 7     
 8     State state = soldOutState;
 9     int count=0;
10     
11     public GumballMachine(int numberGumballs){
12         //构造方法的内容
13     }
14     
15     void setState(State state){
16         this.state = state;
17     }
18     
19     public void insertQuarter(){
20         state.insertQuarter();
21     }
22     
23     public void ejectQuarter(){
24         state.ejectQuarter();
25     }
26     
27     public void turnCrank(){
28         state.turnCrank();
29     }
30     
31     public void releaseBall(){
32         System.out.println("A gumball comes rolling out the slot ...");
33         if(count != 0){
34             count--;
35         }
36     }
37 }

 

 

posted @ 2014-04-14 11:23  soul390  阅读(136)  评论(0)    收藏  举报