什么情况下使用策略模式?
- 有很多个类。
- 这些类的区别只在于某个行为不同。
场景应用举例
- 购买火车车票时,同样的车位,选择成人票,学生票。
- 去上班过程选择使用自行车,步行,公交车等。
解决问题
解决将所有算法写在主程序中使用大量的if…else语句。
假设有老板叫你写一个需求,
类之间的区别设计为Behavior接口
- 将飞这个行为在鸟类中独立出来作为一个区别。
- 一些鸟能展翅飞翔,一些鸟不能飞。
飞行行为
public interface FlyBehavior {
public void fly();
}
不会飞
public class FlyNoWay implements FlyBehavior{
@Override
public void fly() {
System.out.println("我不会飞");
}
}
会飞
public class FlyWithWings implements FlyBehavior{
@Override
public void fly() {
System.out.println("我会飞");
}
}
把鸟作为抽象类
public abstract class Bird {
private FlyBehavior flyBehavior;
public abstract void display();
/**
* 被区别的行为
* @param flyBehavior
*/
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
}
public class Sparrow extends Bird{
/**
* 麻雀会飞
*/
public Sparrow(){
setFlyBehavior(new FlyWithWings());
}
@Override
public void display() {
System.out.println("看着就是一群");
}
}
public class Swallow extends Bird{
/**
* 燕子会飞
*/
public Swallow(){
setFlyBehavior(new FlyWithWings());
}
@Override
public void display() {
System.out.println("看着很漂亮");
}
}
public class Ostrich extends Bird{
/**
* 鸵鸟不会飞
*/
public Ostrich(){
setFlyBehavior(new FlyNoWay());
}
@Override
public void display() {
System.out.println("看着强壮");
}
}