package Strategy_Pattern;/* * head first 設計模式 完整代碼練習 * * 1.策略模式(封裝算法,讓算法之間可以相互代替。<好處:使得算法的變化獨立于使用算法的客戶。>) * * * */public abstract class Strategy_Pattern_Duck { FlyBehaver flyBehaver; EatDifference eatDifference; // 習慣寫空的構造方法 public Strategy_Pattern_Duck() { }; // 用接口來實現具體的算法 public void flyPerform() { flyBehaver.fly(); } public void eatPerform() { eatDifference.eat(); }}package Strategy_Pattern;interface FlyBehaver { // 飛行的方法 void fly();}class FlywhitB implements FlyBehaver { @Override public void fly() { // TODO Auto-generated method stub System.out.PRintln("FlywhitB"); }}class FlywhitA implements FlyBehaver { @Override public void fly() { // TODO Auto-generated method stub System.out.println("FlywhitA "); }}package Strategy_Pattern;public interface EatDifference { void eat();}class EatApple implements EatDifference { @Override public void eat() { // TODO Auto-generated method stub System.out.println("this is duck eatting Apple!"); }}class EatBanana implements EatDifference { @Override public void eat() { // TODO Auto-generated method stub System.out.println("this is duck eatting banana!"); }}package Strategy_Pattern;public class WhiteDuck extends Strategy_Pattern_Duck { public WhiteDuck() { // 具體的whiteDuck有具體的eat和fly的方法 flyBehaver = new FlywhitB(); eatDifference = new EatApple(); } public void sayHello() { System.out.println("這是WhiteDuck!"); }}package Strategy_Pattern;public class Test { public static void main(String arg[]) { Strategy_Pattern_Duck d = new WhiteDuck(); d.eatPerform(); d.flyPerform(); ((WhiteDuck) d).sayHello(); }}
新聞熱點
疑難解答