策略模式學習1

策略模式學習1:

從簡單的模擬鴨子應用做起:

SimUDuck.遊戲中會出現各種鴨子,一邊游泳,一邊呱呱叫。

首先通常的設計,設計一個鴨子超類,所有的鴨子都會呱呱叫,也會游泳,由超類負責處理這部分的行爲實現代碼。

代碼分別如下:

這是一個鴨子超類

public abstract class Duck {
	
	public void quack() {
		System.out.println("呱呱叫...");
	}

	public void swim() {
		System.out.println("游來游去...");
	}
	
	abstract void display();// 每種鴨子的外觀更不同,所以設定爲抽象的
	
	/*
	 * 某一天需求變了,某些鴨子要會飛。
	 * 因此設計想到在超類中加入了這個方法,那麼所有的鴨子都具備了會飛的行爲。
	 */
	void fly(){
		System.out.println("飛來飛去...");
	}
	
	//鴨子的其他方法
}
鴨子子類們:

/**
 * 綠頭鴨
 * @author Administrator
 *
 */
public class MallardDuck extends Duck {

	@Override
	void display() {
		System.out.println("綠頭鴨..");

	}

}

/**
 * 紅頭鴨
 * @author Administrator
 *
 */
public class RedheadDuck extends Duck {

	@Override
	void display() {
		System.out.println("紅頭鴨...");
	}

}

/**
 * 橡皮鴨
 * @author Administrator
 *
 */
public class RubberDuck extends Duck {
	
	@Override
	void display() {
		System.out.println("橡皮鴨...");
	}
	
	/*
	 * 橡皮鴨子不會呱呱叫
	 * 但是問題來了,這個橡皮鴨子會飛?
	 * 那設計人員會說:一樣覆蓋掉就好
	 */
	@Override
	public void quack() {
		//覆蓋超類的呱呱叫
		System.out.println("吱吱叫...");
	}
	
	@Override
	void fly() {
		//覆蓋,變成什麼事兒都不做
		;
	}
		
}

這樣設計就是最通常的設計了,如果需求不變,那這樣設計就沒有什麼缺點了。

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