读书人

灵巧的状态机实现片段

发布时间: 2012-11-19 10:18:51 作者: rapoo

精巧的状态机实现片段

public enum SniperState {  JOINING {    @Override public SniperState whenAuctionClosed() { return LOST; }  },  BIDDING {    @Override public SniperState whenAuctionClosed() { return LOST; }  },  WINNING {    @Override public SniperState whenAuctionClosed() { return WON; }  },  LOST,  WON;  public SniperState whenAuctionClosed() {    throw new Defect("Auction is already closed");  }}


Sniper 英语是狙击手的意思,在这个程序的上下文中表示拍卖交易中的自动出价器。它的状态包括刚刚加入拍卖交易过程、正在出价但未占上风、正在出价但暂时领先、已经失败、已经成功拍下。whenAuctionClosed() 是一个事件回调,表示拍卖交易已经关闭时的回调。

因为已经失败和成功拍下这两个状态都是最终状态,所以调用 whenAuctionClosed() 会抛异常。而其它几个状态会重载这个方法,返回交易关闭后对应的状态。

这段代码摘自 <<Growing Object-Oriented Software, Guided by Tests>>。

读书人网 >软件架构设计

热点推荐