• 简单接口回调例子


    转发有关面向抽象编程和面向接口编程一篇文章https://www.cnblogs.com/chiweiming/p/9229457.html

    以下是面向接口编程的一个例子

    某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如下表所示。

    鸭子种类及其特征

    鸭子种类

    发声特征

    飞行特征

    外观特征

    灰鸭( MallardDuck)

    发出“嘎嘎”声(Quack)

    翅膀飞行(FlyWithWings)

    灰色羽毛

    红头鸭(RedHeadDuck)

    发出“嘎嘎”声(Quack)

    翅膀飞行(FlyWithWings)

    灰色制毛-红头

    棉花鸭(CottonDuck)

    不发声(QuackNoWay)

    不能飞行( FlyNoWay)

    白色

    橡皮鸭(RubherDuck)

    发出橡皮与空气摩擦声(Squeak)

    不能飞行( FlyNoWay

    黑白橡皮色

    为了支持将来能够模拟更多种类鸭子的特征,决定采用策略(Strategy)模式。试画出对应的设计模式的类图结构图。并写java文件、编译java文件、执行class文件。

    以下是类图:

     

    以下是接口代码:

    public interface DUCK {
        public abstract void voice();
        public abstract void fly();
        public abstract void show();
    }

    以下是实现接口的类代码:

    public class MallardDuck implements DUCK{
        public void voice() {
            System.out.print("发出“嘎嘎”声(Quack)");
        }
        public void fly() {
            System.out.print("翅膀飞行(FlyWithWings)");
        }
        public void show() {
            System.out.println("灰色羽毛");
        }
    }
    public class RedHeadDuck implements DUCK {
        public void voice() {
            System.out.print("发出“嘎嘎”声(Quack)");
        }
        public void fly() {
            System.out.print("翅膀飞行(FlyWithWings)");
        }
        public void show() {
            System.out.println("灰色制毛-红头");
        }
    }
    public class CottonDuck implements DUCK {
        public void voice() {
            System.out.print("不发声(QuackNoWay)");
        }
        public void fly() {
            System.out.print("不能飞行( FlyNoWay)");
        }
        public void show() {
            System.out.println("白色");
        }
    }
    public class RubherDuck implements DUCK {
        public void voice() {
            System.out.print("发出橡皮与空气摩擦声(Squeak)");
        }
        public void fly() {
            System.out.print("不能飞行( FlyNoWay)");
        }
        public void show() {
            System.out.println("黑白橡皮色");
        }
    }

    以下是simulator(模拟器(面向接口的类))代码:

    public class simulator {//真正实现接口回调的模拟器
        DUCK duck;
        public void setDUCK(DUCK duck) {
            this.duck=duck;
        }
        public void play() {
            duck.voice();
            duck.fly();
            duck.show();
        }
    }

    Application代码(只用了MallardDuck的例子):

    public class Application {
        public static void main(String args[]) {//主函数的调用
        simulator sim=new simulator();
        sim.setDUCK(new MallardDuck());
        sim.play();
        }
    }

    以下是运行结果截图:

    欢迎大家指正!

    作者:马家升
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Java魔法堂:类加载器入了个门
    Java魔法堂:类加载机制入了个门
    FFDshow video encoder -CLSID
    在Ubuntu下利用Eclipse调试FFmpeg《转》
    vc/vs开发的应用程序添加dump崩溃日志<转>
    Directshow 采集与FFDshow 冲突
    dshow采集过程
    innosetup 安装前、卸载前判断是否有进程正在运行<转>
    手游加速器:[求助]安卓端 手游变速器,类似光环助手的实现方式是怎样的?
    网易云音乐api资料
  • 原文地址:https://www.cnblogs.com/majiasheng/p/10293633.html
Copyright © 2020-2023  润新知