策略模式-java实现

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

设计原则: 多用组合,少用继承。

设计一个Duck 类,由于 Duck的行为 fly quack 是可以变化的,所以将可变化项 fly quack 抽象出来,
[/size][/color]
Duck 类
public abstract class Duck {

FlyBehavior flyBehavior;
QuackBehavior quackBehavior; //为行为接口类型声明两个引用变量,所有//Duck子类都继承它


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

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

public Duck(){

}

public abstract void display();

public void performFly(){
flyBehavior.fly(); //委托给行为类
}

public void performQuack(){
quackBehavior.quack(); //委托给行为类
}

}

fly 行为接口 FlyBehavior
public interface FlyBehavior {

public void fly();
}

quack 行为接口 QuackBehavior
public interface QuackBehavior {

public void quack();
}
fly实例
public class FlyWithWings implements FlyBehavior {

@Override
public void fly() {
System.out.println("I'm flying!!");

}

}
Quack实例
public class Quack implements QuackBehavior {

@Override
public void quack() {
System.out.println("Quack");

}

}

绿头鸭实例
public class MallardDuck extends Duck {

public MallardDuck() {
quackBehavior = new Quack(); //绿头鸭使用Quack类//处理Quack,所以当
// perform Qucak()被调用时,Quack的职责就被委托
// 给Quack对象,儿我们得到了真正的Quack

flyBehavior = new FlyWithWings();
}

@Override
public void display() {
System.out.println("I'm a real Mallard duck");

}

}

测试程序

public class MiniDuckSimulator {

public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performFly();
mallard.performQuack();

mallard.setFlyBehavior(new FlyNoWay());//在运行时想改变鸭子的行 //为,只需调用鸭子的Setter方法就可以了
mallard.performFly();

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值