设计模式—多态

**思路:将一类行为不同形式与鸭子这个本体脱离关系,灵活一点
**

import java.util.*;
abstract class Duck {
    FlyBehavior flyBehavior;                    //驼峰变量表示法
    QuackBehavior quackBehavior;                //定义接口类型实例变量

    public Duck(){}//无参构造方法

    public abstract  void display();

    public void performFly(){
        flyBehavior.fly();                      //委托行为;作用在于将行为委托给实例指向的对象去完成
    }
    public void performQuack(){
        quackBehavior.quack();                  //委托行为;作用在于将行为委托给实例指向的对象去完成
    }
    public void swim(){
        System.out.println("ALL Duck can swim!");   //对比方法,因为所有鸭子都有此行为唯一的表现显示,所以固定
    }


    public void setFlyBehavior(FlyBehavior fb){     //设置实例指向的对象
        flyBehavior=fb;
    }
    public void setQuackBehavior(QuackBehavior qb){
        quackBehavior=qb;
    }
}
//**********************************************************输入类
class ModeDuck extends Duck{
    public ModeDuck(){
        flyBehavior = new FlyNoWay();                   //将鸭子的实例变量flyBehavior指向实现FlyBehavior接口的具体实现类FlyNoWay;
        quackBehavior = new Quack();

    }
    public void display(){
        System.out.println("I am model duck");
    }

}
/*************************************      接口     *************************************/
interface  FlyBehavior{
    public void fly();                          //所有飞行类都必须实现的接口
}
//接口——————实现类1
class FlyWithWings implements FlyBehavior{
    public void fly(){
        System.out.println("I am flying!");
    }

}
//接口——————实现类2
class FlyNoWay implements FlyBehavior{
    public void fly(){
        System.out.println("I can 't fly!");
    }

}

class FlyROCK implements FlyBehavior{
    public void fly(){
        System.out.println("I can 't ROCKfly!");
    }

}

interface  QuackBehavior{                   //所有叫声都应该实现的接口
    public  void quack();
}
//接口——————实现类3
class Quack implements QuackBehavior{
    public void quack(){
        System.out.println("Quack");
    }

}
//接口——————实现类4
class MetuQuack implements QuackBehavior{
    public void quack(){
        System.out.println("<<Silence>>");
    }

}
//接口——————实现类5
class Squack implements QuackBehavior{
    public void quack(){
        System.out.println("Squack");
    }

}
//
class test{
    public static  void main(String[] args){
        Duck duck1 = new ModeDuck();
        duck1.performFly();
        duck1.performQuack();
        duck1.setFlyBehavior(new FlyROCK());
    }
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值