Duck抽象父类:
package com.franky.strategy;
/**
* 策略设计模式
* 定义Duck鸭子抽象类
* @author Administrator
*
*/
public abstract class Duck {
/**
* 内部持有飞行行为(FlyBehavior)的接口对象
*/
private FlyBehavior flyBehavior;
/**
* 内部持有呱呱叫行为(QuackBehavior)的接口对象
*/
private QuackBehavior quackBehavior;
/**
* 默认的构造方法
*/
public Duck() {
//默认Duck类不具备飞行的方法
this.flyBehavior = new FlyNoWay();
//默认Duck类具备呱呱叫的方法
this.quackBehavior = new Quack();
}
/**
* 可在生成Duck的实体子类后,动态设定其飞行类
* @param flyBehavior 飞行类
*/
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
/**
* 可在生成Duck的实体子类后,动态设定其呱呱叫类
* @param quackBehavior 呱呱叫类
*/
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
/**
* 可能特有的飞行方法performFly
* 子类内部实现为 flyBehavior.fly();
*/
public abstract void performFly();
/**
* 可能特有的呱呱叫方法
* 子类内部实现为 quackBehavior.quack();
*/
public abstract void performQuack();
/**
* 公共的游泳方法swim
* 子类可任意进行内部实现
*/
public abstract void swim();
/**
* 公共的外形方法display
* 子类可任意进行内部实现
*/
public abstract void display();
}
飞行行为接口类:
package com.franky.strategy;
/**
* 飞行行为接口FlyBehavior
* @author Administrator
*
*/
public interface FlyBehavior {
void fly();
}
呱呱叫行为接口类:
package com.franky.strategy;
/**
* 呱呱叫行为接口QuackBehavior
* @author Administrator
*
*/
public interface QuackBehavior {
void quack();
}
无法飞行的行为类:
package com.franky.strategy;
/**
* 无法飞行的行为类,实现FlyBehavior接口
* @author Administrator
*
*/
public class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
// 可以什么都不做,这样就不会体现飞行的方法了
// System.out.println("不能飞行!");
}
}
能够飞行的行为类:
package com.franky.strategy;
/**
* 能够飞行的行为类,实现FlyBehavior接口
* @author Administrator
*
*/
public class FlyWithWings implements FlyBehavior {
@Override
public void fly() {
System.out.println("可以飞行哦!");
}
}
无法呱呱叫的行为类:
package com.franky.strategy;
/**
* 无法呱呱叫的行为类,实现QuackBehavior接口
* @author Administrator
*
*/
public class MuteQuack implements QuackBehavior {
@Override
public void quack() {
// 可以什么都不做,这样就无法体现出呱呱叫的行为了
// System.out.println("不能叫!");
}
}
能够呱呱叫的行为类:
package com.franky.strategy;
/**
* 可以呱呱叫的行为类,实现QuackBehavior接口
* @author Administrator
*
*/
public class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("可以呱呱叫哦!");
}
}