Utilisation du modèle de stratégie PHP

不言
Libérer: 2023-03-23 21:02:01
original
2254 Les gens l'ont consulté

Questions :

1 Si l'on définit une classe de canard, elle a deux méthodes : la nage et l'apparence.
2. Lorsque la demande augmente, nous devons ajouter des méthodes permettant aux canards de voler et de cancaner
3. Tous les canards ne peuvent pas cancaner ou voler, les canards ordinaires le peuvent, les canards en plastique ne peuvent pas voler mais seulement le canard en caoutchouc ne peut pas voler ou cancaner. .
4. Lorsque les besoins changent à nouveau, nous avons ajouté un nouveau type de grenouille, et la grenouille peut pleurer.

etc. Lorsque les exigences changent, notre code est difficile à gérer. À ce stade, nous pouvons considérer le modèle de stratégie.

Si vous utilisez un modèle de stratégie, alors votre code devient flexible, le code est le suivant

1 Nous créons une interface volante

public interface Fly {    public void flyBehavior();
}
Copier après la connexion

2. vous avez besoin d'implémenter cette interface

public class FlyNoWay implements Fly{

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

}
Copier après la connexion
public class FlyWithWings implements Fly{

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

}
Copier après la connexion

3. Créez une classe de canard

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


}
Copier après la connexion

4 La sous-classe hérite de la classe parent et fait de la sous-classe ses propres fonctionnalités

.
public class RubberDuck extends Duck{

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

5. Si nous devons ajouter une classe de grenouille à ce moment-là, il y a aussi des croassements écrits de la même manière, car l'utilisation du modèle de stratégie rend votre code plus flexible.

6. Classe de test

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();
    }
}
Copier après la connexion

Résumé

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

Recommandations associées :

Mode stratégie PHP

Exemple d'analyse du modèle de stratégie PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal