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

来源:互联网 发布:apache不解析php7文件 编辑:程序博客网 时间:2024/05/22 01:56

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

 

例如: 我们在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{@Overridepublic void soldTicket() {   System.out.println("没有余票,出票失败");}}

 

public class HasTicketState extends State{private Station station;public HasTicketState(Station sta){this.station = sta;}@Overridepublic 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();}}

 
 

原创粉丝点击