HeadFirst设计模式_读书笔记_010_状态模式

状态模式:允许对象在内部状态改变的时候改变它的行为。

例如: 我们在12306上买票,行为是卖票,状态有两个,有余票则出票成功,余票不足就出票失败。

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();
	}
}

 
 

猜你喜欢

转载自afra-liu.iteye.com/blog/2366700