Verwendung des PHP-Strategiemusters

不言
Freigeben: 2023-03-23 21:02:01
Original
2254 Leute haben es durchsucht

Fragen:

1. Wenn wir eine Entenklasse definieren, gibt es zwei Methoden: Schwimmen und Aussehen.
2. Wenn die Nachfrage steigt, müssen wir Methoden hinzufügen, mit denen Enten fliegen und quaken können.
3. Nicht alle Enten können quaken oder fliegen, normale Enten können das, Plastikenten können nicht fliegen, aber nur die Gummiente kann nicht fliegen oder Quacksalber.
4. Wenn sich die Bedürfnisse wieder ändern, haben wir einen neuen Froschtyp hinzugefügt, und der Frosch kann schreien.

usw. Wenn sich die Anforderungen ändern, ist unser Code schwierig zu handhaben. Zu diesem Zeitpunkt können wir das Strategiemuster betrachten.

Wenn Sie ein Strategiemuster verwenden, wird Ihr Code wie folgt:

1 Wir erstellen eine fliegende Schnittstelle

public interface Fly {    public void flyBehavior();
}
Nach dem Login kopieren

2 Sie müssen diese Schnittstelle implementieren

public class FlyNoWay implements Fly{

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

}
Nach dem Login kopieren
public class FlyWithWings implements Fly{

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

}
Nach dem Login kopieren

3. Erstellen Sie eine Entenklasse

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


}
Nach dem Login kopieren

4. Die Unterklasse erbt die übergeordnete Klasse und macht die Unterklasse zu ihren eigenen Funktionen

public class RubberDuck extends Duck{

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

5. Wenn wir zu diesem Zeitpunkt eine Froschklasse hinzufügen müssen, gibt es auch Krächzgeräusche, die auf die gleiche Weise geschrieben werden, da die Verwendung des Strategiemusters Ihren Code flexibler macht.

6. Testklasse

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();
    }
}
Nach dem Login kopieren

Zusammenfassung

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

Verwandte Empfehlungen:

PHP-Strategiemodus

Beispielanalyse eines PHP-Strategiemusters

Das obige ist der detaillierte Inhalt vonVerwendung des PHP-Strategiemusters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage