爲什麼android中parcelable的實現需要CREATOR

在查看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的使用,這也是工廠方法的一個典型使用方式。

以記之。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章