设计模式-策略模式

#策略者模式
* 一个对象有多种行为(多种选择),并且在运行时还可以改变对象的状态
eg:一个鸭子有很多种飞行分方式,有很多种 叫 的方式,将飞行和叫从鸭子中单独分离出来,然后叫和飞也有很多种不同的形式。 选择其中的任何一种方式,也可以看作是一种策略模式。

public abstract class Duck {

    //使用 其对象
    protected FlyBehavior flyBehavior;
    protected QuackBehavior quickBehavior;

    //飞的形式
    public void performFly() {
        flyBehavior.fly();
    }

    //叫的形式'
    public void perormQuack() {
        quickBehavior.quick();
    }

    public void swim() {
        System.out.println("鸭子游泳");
    }

    abstract void display();

    public FlyBehavior getFlyBehavior() {
        return flyBehavior;
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    public QuackBehavior getQuickBehavior() {
        return quickBehavior;
    }

    public void setQuickBehavior(QuackBehavior quickBehavior) {
        this.quickBehavior = quickBehavior;
    }
}
  • 定义叫和飞的形式
interface FlyBehavior {
    public void fly();
}
  • 叫的方式
interface QuackBehavior {
    public void quick();
}
class Quack implements QuackBehavior {
    @Override
    public void quick() {
        System.out.println("嘎嘎叫");
    }
}

class SlientQuack implements QuackBehavior {
    @Override
    public void quick() {
        System.out.println("沉默的叫");
    }
}

class QuickFly implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("快速的飞");
    }
}
class SingleFly implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("一只翅膀飞");
    }
}
  • 定义鸭子的实现类
class WaterDuck extends Duck {

    public WaterDuck() {
        this.flyBehavior = new QuickFly();
        this.quickBehavior = new Quack();
    }

    @Override
    void display() {
        System.out.println("I am waterDuck");
    }
}
class WoddenDuck extends Duck {

    public WoddenDuck() {
        this.flyBehavior = new SingleFly();
        this.quickBehavior = new SlientQuack();
    }

    @Override
    void display() {
        System.out.println("i ma a wodden duck");
    }

}
  • 在运行时也可以改变其状态
public static void main(String[] args) {
    WaterDuck waterDuck = new WaterDuck();
    waterDuck.performFly();
    //运行时可以替换对象
    waterDuck.setQuickBehavior(new SlientQuack());
    waterDuck.perormQuack();
    waterDuck.display();
    waterDuck.swim();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值