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.
public interface Fly { public void flyBehavior(); }
public class FlyNoWay implements Fly{ @Override public void flyBehavior() { System.out.println("不会飞"); } }
public class FlyWithWings implements Fly{ @Override public void flyBehavior() { System.out.println("用翅膀飞"); } }
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; } }
public class RubberDuck extends Duck{ public RubberDuck(){ //在创造这个子类的时候就确定了它具体的飞行和叫声方法 setFly(new FlyNoWay()); setQuackBehavior(new MuteQuack()); } @Override public void display() { System.out.println("白色的橡皮鸭"); } }
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.把一样的放在本类里,把不一样的容易变的部分抽出去。最后在组合起来。
Recommandations associées :
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!