在查看parcelable的使用使用方法時有提到,實現parcelable的類必須有一個靜態域CREATOR 實現creator<T>接口,但是並未說明爲什麼,代碼查看在java FW層也查看不到其使用的地方,但是比較困惑,今天在重溫java編程思想的時候,看到一個例子,豁然開朗,廢話不多說,上代碼:
package designandpatternTest;
/**
* This class is written for the example to illustrate the interface and the
* innerclass, and how to use the Factory pattern, and it may reveal why the
* parcelable in the android must have a CREATOR static field
*
* see how the FACTORY field works just like the parcelabel CREATOR field in the android.
*
* @author bdgong
*
*/
interface Game {
boolean move();
}
interface GameFactory {
Game getGame();
}
class Checkers implements Game {
private Checkers() {
}
private int moves = 0;
private static final int MOVES = 3;
public boolean move() {
System.out.println("Checkers move " + moves);
return ++moves != MOVES;
}
public static final GameFactory FACTORY = new GameFactory() {
public Game getGame() {
return new Checkers();
}
};
}
class Chess implements Game {
private Chess() {
}
private int moves = 0;
private static final int MOVES = 4;
public boolean move() {
System.out.println("Chess move " + moves);
return ++moves != MOVES;
}
public static final GameFactory FACTORY = new GameFactory() {
public Game getGame() {
return new Chess();
}
};
}
public class InnerClassForFactory {
static void playGame(GameFactory factory) {
Game s = factory.getGame();
while (s.move());
}
public static void main(String[] args) {
playGame(Checkers.FACTORY);
playGame(Chess.FACTORY);
}
}
以上FACTORY的使用應該可以揭示CREATOR的使用,這也是工廠方法的一個典型使用方式。
以記之。