HeadFirst设计模式_读书笔记_010_状态模式_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > HeadFirst设计模式_读书笔记_010_状态模式

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

 2017/3/31 5:32:29  afra.liu  程序员俱乐部  我要评论(0)
  • 摘要:状态模式:允许对象在内部状态改变的时候改变它的行为。例如:我们在12306上买票,行为是卖票,状态有两个,有余票则出票成功,余票不足就出票失败。publicclassStation{publicStatestate;privateinttickets=0;publicStation(inttickets){this.tickets=tickets;if(tickets>0){state=newHasTicketState(this);}}publicvoidsoldTickets()
  • 标签:笔记 读书笔记 模式 设计 设计模式

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

?

例如: 我们在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();
	}
}

?
?

  • 大小: 3.4 KB
  • 查看图片附件
发表评论
用户名: 匿名