将可變部分從程式中抽象分離成算法接口,在該接口下分别封裝一些列算法實作,并使他們可以互相替換,進而導緻用戶端獨立于算法的改變。
1、建立抽象父類
public abstract class Duck { public void quack(){ System.out.println("鴨子叫嘎"); } public void display(){ System.out.println("黃色"); } public void fly(){ } }
2、建立行為接口
public interface FlyStrategy { void performFly(); }
3、在父類中擷取私有接口屬性,并通過該接口,代理實作行為方法
public abstract class Duck { private FlyStrategy flyStrategy; public void setFlyStrategy(FlyStrategy flyStrategy) { this.flyStrategy = flyStrategy; } public void quack(){ System.out.println("鴨子叫嘎"); } public void display(){ System.out.println("黃色"); } public void fly(){ flyStrategy.performFly(); } }
5、建立具體行為類,實作該接口方法
public class FlyWithWin implements FlyStrategy { @Override public void performFly() { System.out.println("用翅膀飛"); } }
6、 在具體對象的構造方法裡,調用父類set這個接口
public class Duck1 extends Duck{ public Duck1() { super(); super.setFlyStrategy(new FlyWithNoWay()); } @Override public void display() { System.out.println("1111"); } }