状态模式:允许对象在内部状态改变的时候改变它的行为。
?
例如: 我们在12306上买票,行为是卖票,状态有两个,有余票则出票成功,余票不足就出票失败。
class="java" name="code">public class Station { public State state; private int tickets = 0; public Station(int tickets) { this.tickets = tickets; if(tickets>0) { state = new HasTicketState(this); } } public void soldTickets() { state.soldTicket(); } public void setTickets(int tickets) { this.tickets = tickets; if(tickets>0) { state = new HasTicketState(this); } } public int getTickets() { return this.tickets; } public void setState(State sta) { this.state = sta; } }
?
public abstract class State { public abstract void soldTicket(); }
?
public class NoTicketState extends State{ @Override public void soldTicket() { System.out.println("没有余票,出票失败"); } }
?
public class HasTicketState extends State{ private Station station; public HasTicketState(Station sta) { this.station = sta; } @Override public void soldTicket() { station.setTickets(station.getTickets()-1); System.out.println("出票成功,余票" + station.getTickets()+"张"); if(station.getTickets() == 0) { this.station.setState(new NoTicketState()); } } }
?
public static void main(String args[]) { Station sta = new Station(3); sta.soldTickets(); sta.soldTickets(); sta.soldTickets(); sta.soldTickets(); sta.setTickets(10); sta.soldTickets(); sta.soldTickets(); } }
?
?