首頁  >  文章  >  後端開發  >  使用PHP策略模式

使用PHP策略模式

不言
不言原創
2018-04-14 16:20:022194瀏覽

問題:

1.如果讓我們定義一隻鴨子類,有游泳和外表兩個方法。
2.當需求增加的時候,我們需要給鴨子類增加飛行和叫聲的方法
3.不是所有的鴨子都會叫或都會飛行,一般的鴨子會,塑膠鴨不會飛只會叫,橡皮鴨不會飛也不會叫。
4.當需求又要改變的時候,我們新增加了一個青蛙類,青蛙會叫。

等等一系列當需求改變的時候,我們程式碼難以處理。這時候我們可以考慮策略模式。

如果你使用策略模式,那麼你的程式碼變得有彈性,程式碼如下

1.我們建立一個會飛的介面

public interface Fly {    public void flyBehavior();
}

2.寫你需要的類別實作這個介面

public class FlyNoWay implements Fly{

    @Override
    public void flyBehavior() {
        System.out.println("不会飞");
    }

}
public class FlyWithWings implements Fly{

    @Override
    public void flyBehavior() {
        System.out.println("用翅膀飞");
    }

}

3.建立鴨子類別

public abstract class Duck {    //多态形式定义飞行
    private Fly fly;    //多态的形式定义叫声
    private QuackBehavior quackBehavior;    public void display(){
        System.out.println("黄色的鸭子");
    }    public void swim(){
        System.out.println("鸭子可以游泳");
    }    public void perforFly(){
        fly.flyBehavior();
    }    public void perforQuack(){
        quackBehavior.quack();
    }    public Fly getFly() {        return fly;
    }    public void setFly(Fly fly) {        this.fly = fly;
    }    public QuackBehavior getQuackBehavior() {        return quackBehavior;
    }    public void setQuackBehavior(QuackBehavior quackBehavior) {        this.quackBehavior = quackBehavior;
    }


}

4.子類別繼承父類,並且讓子類別變得有自己的特色

public class RubberDuck extends Duck{

    public RubberDuck(){        //在创造这个子类的时候就确定了它具体的飞行和叫声方法
        setFly(new FlyNoWay());
        setQuackBehavior(new MuteQuack());
    }    @Override
    public void display() {
        System.out.println("白色的橡皮鸭");
    }
}

5 .如果此時我們需要加入一個青蛙類,也有呱呱呱的叫聲也是一樣的寫法,因為用策略模式讓你的代碼變得有彈性。

6.測試類別

public class TestMain {    public static void main(String[] args) {
        KeDaDuck keDaDuck = new KeDaDuck();
        keDaDuck.display();
        keDaDuck.perforFly();
        keDaDuck.perforQuack();
        PlasticDuck plasticDuck = new PlasticDuck();
        plasticDuck.display();
        plasticDuck.perforFly();
        plasticDuck.perforQuack();
        RubberDuck rubberDuck = new RubberDuck();
        rubberDuck.display();
        rubberDuck.perforFly();
        rubberDuck.perforQuack();
        Rana rana = new Rana();
        rana.perforQuack();
    }
}

總結

1.多用组合,少用继承。
2.在项目开始前就策划好,让其代码变得有弹性,防止增加和改变需求。
3.把一样的放在本类里,把不一样的容易变的部分抽出去。最后在组合起来。

相關推薦:

PHP策略模式 

################################################################# ##實例分析PHP策略模式  ###   ####

以上是使用PHP策略模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn