简单接口回调例子

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

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

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

鸭子种类及其特征


鸭子种类


发声特征


飞行特征


外观特征


灰鸭( MallardDuck)


发出“嘎嘎”声(Quack)


翅膀飞行(FlyWithWings)


灰色羽毛


红头鸭(RedHeadDuck)


发出“嘎嘎”声(Quack)


翅膀飞行(FlyWithWings)


灰色制毛-红头


棉花鸭(CottonDuck)


不发声(QuackNoWay)


不能飞行( FlyNoWay)


白色


橡皮鸭(RubherDuck)


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


不能飞行( FlyNoWay


黑白橡皮色

为了支持将来能够模拟更多种类鸭子的特征,决定采用策略(Strategy)模式。试画出对应的设计模式的类图结构图。

以下是类图:

以下是接口代码:

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();
    }
}

以下是运行结果截图:

欢迎大家指正!

原文地址:https://www.cnblogs.com/majiasheng/p/10293633.html

时间: 2024-07-28 15:52:12

简单接口回调例子的相关文章

一个简单的回调(例子)

1.声明一个回调Interface: public interface CallBack { /** * 执行回调方法 * @param objects 将处理后的结果作为参数返回给回调方法 */ public void execute(Object... objects ); } 2.回调的地方继承回调,实现回调的方法: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRe

简单使用rxjava,告别繁琐的接口回调(1)

接口回调虽然繁琐,但也是必须掌握的一个技巧,接口回调的用法很多,首先搞清楚什么时候需要用接口回调,怎么使用接口回调. public class InterQueryDataActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.l

笑谈接口回调

接口回调是个比较抽象但是很重要的知识,大多数初学者都会在刚接触它时感觉抓不住要领,但当我们实际掌握它后,会对它爱不释手.废话不多说,让我们开始吧. 我认识新事物的一般有这样的习惯,就是先从事物的名称入手.那么对于接口回调这个新事物,我们能从这个名字中获取多少信息呢?首先是接口,什么是接口呢?相信有一定编程基础的朋友都知道,就是一种规范,但是这种规范在没有实现之前,没有任何作用.就好比招聘广告一样,广告上列出的条件都是宽泛的,如我要招一名熟悉Java的程序员.这是一个规范,你想来应聘就必须满足熟悉

Android 中的接口回调

http://blog.csdn.net/wangjinyu501/article/details/22052187 在Android中到处可见接口回调机制,尤其是UI事件处理方面.举一个最常见的例子button点击事件,button有一个点击方法onClick(),我们知道onclick()是一个回调方法,当用户点击button就执行这个方法.在源码中是这样定义的: //这个是View的一个回调接口 /** * Interface definition for a callback to be

Java接口回调机制

一.前言 最近在看android Fragment与Activity进行数据传递的部分,看到了接口回调的内容,今天来总结一下. 二.回调的含义和用途 1.什么是回调? 一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类同步调用.异步调用和回调.同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行.异步调用是一种类似消息或事件的机制解决了同步阻塞的问题,例如A通知B后,他们各走各的路,互不影响,不用像同步调用那样,A通知B

回调函数、Java接口回调 总结

回调函数 谈到回调,我们得先从回调函数说起,什么叫回调函数呢? 回调函数是什么?    百度百科的解释:回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外一方调用的,用于对该事件或条件进行响应.    接着,我们从下图简单说明一下回调函数.    已知图形上面三种模块,此时标号2能称为回调函数吗? 答案:不能,只有当标号2函

接口_ _接口回调机制

在Android中到处可见接口回调机制,尤其是UI事件处理方面,本文给大家介绍android接口回调机制,涉及到android接口回调相关知识,对本文感兴趣的朋友可以参考下本篇文章 在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致我们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话你是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误.那有什么好的方法去实现数据的线性传递呢?先

Android接口回调机制

开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A可以继续先做别的事情. 那么就只有当B解决完问题后告诉A问题解决了,A才可以能解决这个问题. 代码中比如最常用的: 一个Activity中给按钮一个接口回调方法,只有用户点击了这个按钮,告诉按钮被点击了,才会执行按钮接口回调的方法 Button btn = new Button(this); btn

一个简单的KVO例子

一个简单的KVO例子. 两个界面,第一个界面显示名字和配偶(spouse)名字,第二个界面显示修改名字和配偶名字,返回时,将看到第一个界面的名字显示发生改变. 首先定义一个person类作为model. #import <Foundation/Foundation.h> @interface Person : NSObject @property (strong, nonatomic) NSString *name; @property (strong, nonatomic) NSString