- 一、策略模式
- 二、举例
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
二、举例设计一个鸭子类,要求如下
- 飞,这种行为有多种变化
- 叫,这种行为有多种变化
- 展示,展示这只鸭子的种类
- 游泳行为,所有的鸭子都应该会游泳
分析:由于鸭子的飞、叫这种行为具有变化性,所以我们应该将变化独立封装起来,因此我们可以单独定义两个行为接口类,一个飞行为接口类,叫行为接口类,同时使用与之对应的不同的行为子类去实现,这样的一种设计模式就是策略模式。接下来看代码
鸭子类
package com.jackeys.StrategyMode;
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){}
public abstract void display();
public void swim(){
System.out.println("所有的鸭子都会游泳");
}
public void performFly(){
flyBehavior.fly();
}
public void performQuack(){
quackBehavior.quack();
}
}
飞行为接口类
package com.jackeys.StrategyMode;
public interface FlyBehavior {
void fly();
}
不会飞的行为实现类
package com.jackeys.StrategyMode;
public class FlyNoWay implements FlyBehavior{
@Override
public void fly() {
System.out.println("我不会飞");
}
}
会飞的行为实现类
package com.jackeys.StrategyMode;
public class FlyWithWings implements FlyBehavior{
@Override
public void fly() {
System.out.println("我会飞");
}
}
叫行为接口类
package com.jackeys.StrategyMode;
public interface QuackBehavior {
void quack();
}
呱呱叫行为接口实现类
package com.jackeys.StrategyMode;
public class Quack implements QuackBehavior{
@Override
public void quack() {
System.out.println("呱呱呱");
}
}
吱吱叫行为接口实现类
package com.jackeys.StrategyMode;
public class Squeak implements QuackBehavior{
@Override
public void quack() {
System.out.println("吱吱吱");
}
}
不会叫行为接口实现类
package com.jackeys.StrategyMode;
public class MuteQuack implements QuackBehavior{
@Override
public void quack() {
System.out.println("沉默中......");
}
}
测试
package com.jackeys.StrategyMode;
public class Test {
public static void main(String[] args) {
Duck duck=new MallardDuck();
duck.performFly();//我会飞
duck.performQuack();//呱呱呱
duck.display();//我是一只绿头鸭
}
}



