天天看點

政策模式 簡單實作

将可變部分從程式中抽象分離成算法接口,在該接口下分别封裝一些列算法實作,并使他們可以互相替換,進而導緻用戶端獨立于算法的改變。

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");
    }

}