使用PHP策略模式

不言
不言 原创
2023-03-23 21:02:01 1766浏览

问题:

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核实处理。