Android[高級教程] 設計模式之六 中介者模式(二)

我們還是接着上一章節的中介者模式,這次我們來重構一下,唐僧只告訴小妖讓他的徒弟們來救他,至於小妖通知誰,他不管,反正就是三個徒弟,小妖也想省事,就看見誰就通知誰唄。於是,我們的代碼修改成:

public class Monster {

	private Person person;
	private String message;

	public Monster() {
		
	}

	public void setPerson(String name) {
		
		if (name.equals("悟空")) {
			
			person = new Wukong();
			
		} else if (name.equals("八戒")) {
			
			person = new Bajie();
			
		} else if (name.equals("沙僧")){
			
			person = new Shaseng();
		}
		
		person.setMessage(message);
	}

	public String getMessage() {
		return person.getMessage();
	}

	public void setMessage(String message) {
		this.message = message;
	}

}
首先是小妖的代碼,他看見誰就通知誰,至於消息就是唐僧需要轉達的消息。接下來看一下唐僧的代碼:

public class Tangseng {

	private Monster monster;

	public void sendMessage(Monster monster, String message) {

		this.monster = monster;
		monster.setMessage(message);

	}

	public String getMessage() {

		return monster.getMessage();

	}

}
裏面只有小妖這個對象,他只跟小妖接觸,只對小妖說話。然後就是悟空的類了:

public class Wukong implements Person {

	private String name;
	private String message;

	public Wukong() {
		this.name = "孫悟空";
	}

	@Override
	public void setMessage(String message) {

		this.message = message;

	}

	@Override
	public String getMessage() {

		return name + "收到" + message;

	}

}
這裏三個實現類基本完成了,最後就是調用了,最終實現如下:

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();
		Monster monster = new Monster();
		tangseng.sendMessage(monster,"'徒弟救我'的消息");
		
		monster.setPerson("悟空");
		lists.add(tangseng.getMessage());
		
		monster.setPerson("八戒");
		lists.add(tangseng.getMessage());
		
		
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, lists);

		listView.setAdapter(adapter);

	}
}
最後運行結果如圖:


這裏我們就對中介模式進行了重構,這裏我還得說一下,其實設計模式最終需要實現的是低藕合,每個類之間儘量獨立。OK,謝謝大家的關注。



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