java设计模式-Head First设计模式之策略模式

Head First设计模式之策略模式


1 定义

策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户

2 设计原则

1 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要的变化的代码混合在一起;

2 针对接口编程,而不是针对实现编程;

3 多用组合,少用继承。

3 代码实现

1 飞行父类
package Strategy;

public interface FlyBehavior {

    public void fly();

}
 飞行的两个具体实现类
package Strategy;

public class FlyNoWay implements FlyBehavior{

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("===我飞不起来===");
    }

}
package Strategy;

public class FlyWithWings implements FlyBehavior{

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("===我能用翅膀飞===");
    }

}
2 叫的父类
package Strategy;

public interface QuackBehavior {

    public void quack();

}
 叫的实现类  
package Strategy;

public class Quack implements QuackBehavior{

    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("====我也会呱呱叫====");
    }

}
package Strategy;

public class Squeak implements QuackBehavior{

    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("====我不会呱呱叫====");
    }

}
3 鸭子父类
package Strategy;

public abstract class Duck {

    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;

    public abstract void display();

    public void performFly(){
        flyBehavior.fly();
    }

    public void performQuack(){
        quackBehavior.quack();
    }

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


    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }


}
鸭子的实现类
package Strategy;

public class ModelDuck extends Duck{


    public ModelDuck(){
        flyBehavior=new FlyNoWay();
        quackBehavior=new Squeak();
    }

    @Override
    public void display() {
        // TODO Auto-generated method stub
        System.out.println("===我是一只模型鸭===");

    }

}
4 客户端
package Strategy;

public class MimiDuckSimulator {

    public static void main(String args[]){
        Duck model=new ModelDuck();
        model.performFly();
        model.performQuack();
        System.out.println("------------------------");
        model.setFlyBehavior(new FlyWithWings());
        model.setQuackBehavior(new Quack());
        model.performFly();
        model.performQuack();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值