1.如果让我们定义一只鸭子类,有游泳和外貌两个方法。
2.当需求增加的时候,我们需要给鸭子类增加飞行和叫声的方法
3.不是所有的鸭子都会叫或者都会飞行,一般的鸭子会,塑料鸭不会飞只会叫,橡皮鸭不会飞也不会叫。
4.当需求又要改变的时候,我们新增加了一个青蛙类,青蛙会叫。
等等一系列当需求改变的时候,我们代码难以处理。这个时候我们可以考虑策略模式。
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.把一样的放在本类里,把不一样的容易变的部分抽出去。最后在组合起来。
相关推荐:
立即学习“PHP免费学习笔记(深入)”;
以上就是使用PHP策略模式的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号