public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
public Duck(){}
public abstract void display();
public void performFly(){
flyBehavior.fly();
}
public void performQuack(){
quackBehavior.quack();
}
//其他行为
public void setFlyBehavior(FlyBehavior fb){
flyBehavior =fb;
}
public void setQuackBehavior(QuackBehavior qb){
quackBehavior=qb;
}
}
2、MallardDuck类和ModelDuck类(动态设定):
public class MallardDuck extends Duck{
public MallardDuck(){
quackBehavior=new Quack();
flyBehavior=new FlyWithWings();
}
public void display(){
System.out.println("Im a real MallardDuck!");
}
}
public class ModelDuck extends Duck{
public ModelDuck(){
flyBehavior=new FlyNoWay();
quackBehavior=new Quack();
}
public void display(){
System.out.println("Im a model duck.");
}
}
3、FlyBehavior接口和行为实现类:
public interface FlyBehavior {
public void fly();
}
public class FlyWithWings implements FlyBehavior{
public void fly(){
System.out.println("Im flying!");
}
}
public class FlyNoWay implements FlyBehavior{
public void fly(){
System.out.println("I cannot fly!");
}
}
4、QuackBehavior接口和行为实现类:
public interface QuackBehavior {
public void quack();
}
public class Quack implements QuackBehavior{
public void quack(){
System.out.println("Quack");
}
}
public class MuteQuack implements QuackBehavior{
public void quack() {
// TODO Auto-generated method stub
System.out.println("<<Silence>>");
}
}
public class Squeak implements QuackBehavior{
public void quack(){
System.out.println("Squeak");
}
}
5、测试类:
public class MiniDuckSimulator {
public static void main(String[]args){
Duck mallard= new MallardDuck();
mallard.performFly();
mallard.performQuack();
Duck model=new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyWithWings());
model.performFly();
}
}