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》。
没有评论:
发表评论