由于使用draw画图,无法直接放上来,所以使用图片展示,如果需要请Q
正文:
代码整合
//鸭子超类。
public abstract class Duck {
//鸭子需要飞和叫,所以创建两个行为接口
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
//为行为接口类型声明两个引用变量,所有鸭子子类(在同一个package中)都继承他们
public Duck() {
}
public abstract void display(){
}
public void perormFly(){
flyBehavior.fly(); //委托给行为类
}
public void performQuack(){
quackBehavior.quack(); //委托给行为类
}
//当创建一个模型鸭子,我们需要给他设置飞和叫的行为,传入一个实现FlyBehavior接口的实现类,然后修改这只模型鸭子
public void setFlyBehavior(FlyBehavior fb) {
flyBehavior = fb;
}
public void setQuackBhavior(QuackBehavior qb) {
quackBehavior = qb;
}
public void swim(){
System.out.println("all ducks float, even decoys!");
}
//行为飞的接口
public interfac FlyBehavior {
public void fly();
}
//行为叫的接口
public interfac QuackBehavior {
public void quack();
}
public class FlyRocketPowered implements FlyBehavior{
@Override
public void fly(){
System.out.println("我火箭飞行“);
}
}
public class MuteQuack implements QuackBehavior{
@Override
public void quack(){
System.out.println(" 不会叫 “);
}
}
//测试类
public class MiniDuckSimulator {
public static void main(String[] args) {
/** 这里创建一个子类,野鸭子,在创建具体实现类时,构造方法,都会不一样,
* 区别在于构造时 给他实现接口类的赋值
* quackBehavior = new Quack();
* flyBehavior = new FlyWithWings();
**/
// Duck mallard = new MallardDuck();
//mallard.performQuack();
//mallard.performFly();
Duck model = new ModelDuck();
model.performFly();
//传入一个实现飞的类,向上转型
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
}
}