Android[高級教程] 設計模式之九 命令模式

這次我們來說一下命令模式,命令大家都聽說過吧,BOSS一句話,我們打工的就得拼命去完成,這裏BOSS的話就是命令,BOSS只管發號施令,其他的他不用管,底下自有人去處理,所以大家都喜歡當BOSS,對吧?這裏,我們還是以《西遊記》裏的主人公來解說一下,唐僧發出“打妖怪”的命令,他的三個徒弟就得乖乖去做,這裏唐僧就是BOSS,“打妖怪”就是命令,三個徒弟就是最終需要執行的人,至於徒弟們怎麼“打怪獸”,唐老大就管不着了,這裏用命令把唐老大跟三個徒弟分隔開來,以後唐老大要發佈新的命令,我們只要增加命令類裏的方法就可以了。我們先來看一下例圖:


這裏唐僧就只管發號施令,命令傳給誰,誰就得拼命去完成。我們來看一下實現類呢:

這裏首先定義了一個Person類,這個類是三個徒弟的基類,可以實現名字的命名,收到的命令,最後就是打妖怪的方法,當然每個徒弟打妖怪的方法是不一樣的,所以我們將這個方法抽像出來,具體實現由具體類來實現:

public abstract class Person {

	private String name;
	private String message;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	//攻擊方法
	public abstract String attack();

}
這個方法是比較簡單的,就是定義了三個徒弟可以做什麼:

接着,我們來看一下悟空的類:

public class Wukong extends Person {

	public Wukong() {

		this.setName("悟空");
	}

	@Override
	public String attack() {

		return this.getName() + "收到'" + this.getMessage() + "'的消息並用金箍棒打妖怪";
	}

}
首先,定義了悟空的名字,然後就是悟空打妖怪的方法。

下面是命令類了,命令類裏定義了誰接收命令,接收什麼樣的命令:

public class Command {
	
	private Person person;
	private String message;
	
	public Command(String message) {
		
		this.message = message;
	}
	
	public void setPerson(Person p){
		
		this.person = p;
	}
	
	public String execute(){
		
		person.setMessage(message);
		
		return person.attack();
	}

}

最後就是BOSS類,唐老大了,唐老大隻管發號施令:

public class Tangseng {

	private Command command;
	
	public Tangseng() {
		
	}

	public void setCommand(Command command) {
		
		this.command = command;
		
	}

	public String getMessage() {

		return command.execute();
		
	}

}
爲了知道誰接收到命令,並且做了什麼事,我們這裏返回一個消息給唐老大,好了,其本的實現完成了,我們放到Android裏看一下最後的實現呢:

public class XiyoujiActivity extends Activity {

	private ListView listView;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		listView = (ListView) findViewById(R.id.listView1);

		ArrayList<String> lists = new ArrayList<String>();

		//唐僧發出"打妖怪"的命令
		Tangseng tangseng = new Tangseng();
		Command command = new Command("打妖怪");
		tangseng.setCommand(command);
		
		//命令傳給悟空
		command.setPerson(new Wukong());
		lists.add(tangseng.getMessage());

		//命令傳給八戒
		command.setPerson(new Bajie());
		lists.add(tangseng.getMessage());

		//命令傳給沙僧
		command.setPerson(new Shaseng());
		lists.add(tangseng.getMessage());

		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, lists);

		listView.setAdapter(adapter);

	}
}
看一下圖吧:


好了,這裏命令模式我們也完成了。謝謝大家的關注

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