在《敏捷软件开发》中有一个保龄球的例子。作者的实现方法不是一味强调模式对象之类的东西。从中我们可以学习到大师开发软件的灵活性和务实态度。为了表达我对大师的有如滔滔江水,连绵不绝的敬意,自己也按照自己的想法写了一个。 package demo; import java.util.Vector; import java.util.Iterator; public class Main { /** *//** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 Test tg = new Test(); tg.testGame(); //tg.testFour(); //tg.testPerfectGame(); //tg.testEndOfArray(); //tg.testHeartBreadk(); //tg.testTenthFrameSpare(); }} class Test { Game g; Test() { g = new Game(); } void testFour() { g.add(5); g.add(4); g.add(7); g.add(2); show();//18 show(0);//9 show(1);//18 } void testPerfectGame() { for (int i = 0; i < 12; i++) { g.add(10); } show();//300 } void testEndOfArray() { for (int i=0; i<9;i++) { g.add(0); g.add(0); } g.add(2); g.add(8); g.add(10); show();//20 } void testHeartBreadk() { for (int i = 0; i < 11; i++) { g.add(10); } g.add(9); show();//299 } void testTenthFrameSpare() { for(int i = 0;i<9; i++) g.add(10); g.add(9); g.add(1); g.add(1); show(); } void show() { System.out.println( "Game score: " + g.score() );//270 } void show(int index) { System.out.println("Frame " + index + " score: " + g.frameScore(index)); } void testGame() { g.add( 1 ); g.add( 4 );//5 g.add(4); g.add(5);//14 g.add(6); g.add(4); g.add(5);//29 g.add(5); g.add(10);//59 g.add(0); g.add(1);//70 71 g.add(7); g.add(3); g.add(6); g.add(4); g.add(10); g.add(2); g.add(8); g.add(6); if (g.getFrameCount() >= 10) { show();//133 } for (int i = 0; i < g.getFrameCount(); ++i) { show(i); } }} class Game { int score() { //返回最后的分数 return frameScore(frames.size() - 1); } int getFrameCount() { return frames.size(); } int frameScore(int index) { int count = 0; for (int i = 0; i <= index; ++i) { count += frames.get(i).score(); } return count; } Vector<Frame> frames = new Vector<Frame>(); Vector<Frame> frameTemps = new Vector<Frame>(); int jg = 1; //间隔,非全中要两次才创建一个frame void add(int pinsCount) { //更新临时队列 for(Frame f :frameTemps) {