关注 公众号 JavaStorm 获取更多干货
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。(Java的TreeSet集合中,构造方法可传入具体的比较器对象以实现不同的排序算法。就是利用的策略模式)策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中, 从而使得它们可以相互替换,使用策略模式可以把行为和环境分割开来。角色
定义 Duck 抽象类,所有的鸭子都继承。通过组合代理的模式实现飞行与嘎嘎叫的功能,持有策略类(飞行,呱呱叫)的引用。
提供set方法指定不同的策略,然后通过 performFly 与 performQuack 委托对应的策略实现。
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public void performFly() {
flyBehavior.fly();
}
public void performQuack() {
quackBehavior.quack();
}
/**
* 展示鸭子
*/
public abstract void display();
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
}
定义野鸭子:会飞,呱呱叫。
public class MallardDuck extends Duck {
@Override
public void display() {
System.out.println("我是一只野鸭子");
}
}
定义模型鸭子:不会飞也不会叫。
public class ModelDuck extends Duck {
@Override
public void display() {
System.out.println("我是一只模型鸭子");
}
}
叫声抽象策略
public interface QuackBehavior {
void quack();
}
飞行抽象策略
public interface FlyBehavior {
void fly();
}
实现抽象策略,规定算法逻辑。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。