在查看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的使用,这也是工厂方法的一个典型使用方式。
以记之。