直接上代码
作者的原话是(如果Games类表示一段复杂的代码,那么这种方式就允许你在不同类型的游戏中复用这段代码.)
public interface Game {
boolean move();
}
public interface GameFactory {
Game getGame();
}
class Checkers implements Game {
private int moves = 0;
private static final int MOVES = 3;
public boolean move() {
System.out.println("Checkers move " + moves);
return ++moves != MOVES;
}
}
class CheckersFactory implements GameFactory {
public Game getGame() {return new Checkers();}
}
class Chess implements Game {
private int moves = 0;
private static final int MOVES = 4;
@Override
public boolean move() {
System.out.println("Chess move " + moves);
return ++moves != MOVES;
}
}
class ChessFactory implements GameFactory {
@Override
public Game getGame() {
return new Chess();
}
}
复用在下面这里发生
public class Games {
public static void playGame(GameFactory factory) {
/////////////////////////////////////////////////////////////////作者的意思是主要可以复用下面这段代码
Game s = factory.getGame();
while(s.move())
;
/////////////////////////////////////////////////////////////////
}
public static void main(String[] args) {
playGame(new CheckersFactory());
playGame(new ChessFactory());
}
}