設計原理1:找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼混在一起
設計原理2:針對接口編程,而不是針對實現編程
設計原理3:多用組合,少用繼承
選自《Head First 設計模式》:
策略模式(Strategy Pattern):定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶
案例: 如同《Head First 設計模式》的鴨子案例,如下爲遊戲中角色和武器之間的案例:
武器的使用可以視爲算法,並且會因爲角色的不同而經常發生變化,因此針對WeaponBehavior接口編程。案例代碼:
public abstract class Character {
private WeaponBehavior weapon;
public void fight() {
weapon.useWeapon();
}
public void setWeapon(WeaponBehavior weapon) {
this.weapon = weapon;
}
}
public interface WeaponBehavior {
public void useWeapon();
}
public class SwordBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("I am using sword");
}
}
public class PatternDemo {
public static void main(String[] args) {
King king = new King();
king.setWeapon(new KnifeBehavior());
king.fight();
king.setWeapon(new AxeBehavior());
king.fight();
}
}