如何使用回调机制?

2024-02-17

我必须实施一项信用卡申请,其中我必须只处理一个信用卡帐户。类似的操作credit(), debit(), pinChange().

但对我来说问题是我必须使用“JAVA CALLBACK”机制在两种情况下通知用户:

  1. 引脚更改时
  2. 当余额低于 5000 时。

如何使用这些通知的回调?

这里更关注 CALLBACKS 的使用。

public interface Callback {

    public void onPinChange();
    public void onLowBalance();

    }
    import java.util.Scanner;

    public class CreditCard implements Callback{

    Callback callback;

    int pin;
    float balance;

    public CreditCard() {

        callback = this;
        this.pin = 1234; // default pin
        this.balance = 10000f; // opening balance

    }

    public void creditBalance(float amount) {
        this.balance = this.balance + amount;

    }

    public void debitBalance(float amount) {
        if (balance <= amount) {
            System.out.println("Not enough balance to debit");
        } else {
            balance = balance - amount;
        }
        if (balance < 5000) {
            callback.onLowBalance();
        }

    }

    public void changePin(int newPin) {
        System.out.println("Enter the current pin");
        Scanner scanner = new Scanner(System.in);
        int existingPin = scanner.nextInt();
        if (existingPin != pin) {
            System.out.println("Wrong pin!");
        } else {
            pin = newPin;
            callback.onPinChange();
        }
        scanner.close();
    }

    @Override
    public void onPinChange() {
        System.out.println("Pin changed");

    }

    @Override
    public void onLowBalance() {
        System.out.println("low balance");

    }

    public static void main(String[] args) {

        CreditCard card = new CreditCard();
        card.changePin(3333);
        card.debitBalance(5200);
    }
}

更改 Pin 码并降低余额是 CreditCard 的行为,因此 CreditCard 对象是事件生成者而不是事件侦听器,因此您不希望将 CreditCard 设为侦听器(回调)。

实际上,当 pinChange 或 lowBalance 等事件发生时,您的信用卡将回调您想要通知的侦听器的方法。

您的代码应如下所示:

class CreditCard{
    int pin, balance;
    private Callback callback;
    CreditCard(Callback callback){
        this.callback=callback;
    }

    public void pinChange(int pin){
        this.pin=pin;
        //inform the listener as well
        callback.pinChanged();
    }

    public void withdraw(int amount){
        this.balance-=amount;
        //inform the the listener
        if(balance<1000)callback.lowBalance();
    }
}

class MyListener implements Callback{
    public void pinChanged(){
        //do what is needed when somebody changes pin..
       //i.e send sms to the customer 
        System.out.println("PIN changed..");
    }

    public void lowBalance(){
        //inform the customer about lowbalance.
        System.out.println("little money in card..");
    }

    main(String... args){
        CreditCard cc=new CreditCard(new MyListener());
        cc.changePin(3306);
    }
}

希望这会清楚...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用回调机制? 的相关文章

随机推荐

  • 如何从 SQL Server 中的值列表中进行选择

    我有一个非常简单的问题无法解决 我需要做这样的事情 select distinct from 1 1 1 2 5 1 6 有人可以帮忙吗 Edit 该数据以文本文件形式来自我们的一位客户 它完全没有格式化 它是一个很长的单行文本 但在 Ex
  • 如何告诉 springdoc-openapi-maven-plugin 生成 YAML 而不是 JSON?

    我正在使用springdoc maven openapi plugin这边走
  • libstdc++ 并行模式:谁在使用它?安全吗?有类似的项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 C 库的 GNU 实现支持并行模式 解释如下here http gcc gnu org onlinedocs libstdc manual pa
  • 在 Homestead 上运行 Laravel Dusk

    我用的是家园版本1 0 1 and Laravel 版本 5 4 16 我通过阅读来设置 Laravel dusk文档 https laravel com docs 5 4 dusk installation 但是 当我跑步时php art
  • 如何在 Rails 迁移中将可空列更改为不可空列?

    我在之前的迁移中创建了一个日期列并将其设置为可为空 现在我想将其更改为不可为空 假设该数据库中存在空行 我该如何执行此操作 如果这些列当前为空 我可以将它们设置为 Time now 如果您在迁移中执行此操作 那么您可能可以这样做 Make
  • SvelteKit 瞬间无样式 html

    我通过 sveltekit cli 命令创建了一个基本应用程序 我选择的选项是 scss 和 typescript 当我启动应用程序的一瞬间 我看到了无样式的 html 每次我创建的每个项目都会发生这种情况 我做了一些测试 看起来 css
  • Azure Function 给出错误:此平台不支持 System.Drawing

    如果这个问题措辞不好 有人可以帮我解决吗 我有一个 Azure Function 2 0 它依赖于一些 System Drawing 代码 我添加了对 System Drawing Common 4 5 0 的 NuGet 引用 然而 发布
  • 如何在Contact Form 7 WordPress中实施Google Adwords转换代码

    我想将 Google 转化 Adwords 代码集成到联系表7插件无需重定向到 谢谢 页面 如何在中实现 Google Adwords 转换代码联系表7插件 有人可以帮助我吗 我不喜欢重定向到另一个页面 我在联系表单 7 中找到了实施 Go
  • 如何遍历/迭代 STL 映射?

    我想遍历一张STL地图 我不想使用它的密钥 我不关心顺序 我只是寻找一种访问它包含的所有元素的方法 我怎样才能做到这一点 是的 您可以遍历标准库map 这是用于遍历的基本方法map 并作为遍历任何标准库集合的指导 C 03 C 11 inc
  • JavaScript 在某个索引后找到第一个正则表达式匹配

    我想找到第一个RegExp一定之后匹配index in a String在 JavaScript 中 JavaScriptString prototype indexOf在搜索开始处提供第二个参数限制 但indexOf只支持String n
  • CryptographicException:错误的 PKCS7 填充

    我看到一小部分生产用户随机报告与使用 Xamarin Android 加密 解密字符串相关的异常 但不幸的是我无法重现它 什么可能导致此问题和 或如何重现该异常 以便找到修复 解决方法 CryptographicException Bad
  • Swift 像闭包一样使用选择器参数

    我只是想知道是否可以将函数传递给按钮操作 通常是选择器 例如 通常我会说 UIBarButtonItem title Press style Done target self action functionToCall func funct
  • 当前拓扑不支持会话

    Hi 我收到错误 当前拓扑不支持会话 请参考附图 并编码为 async function insertBooking parking aFunction const session await BookingSchema startSess
  • 为什么我不能将此接口转换为具体类?

    我有一个界面IApiDataWithProperties 一个类叫做Event实现了这个接口 通常我可以投射一个对象IApiDataWithProperties to Event 假设它是一个 并且编译器让我这样做没有问题 在这种情况下 该
  • 在Oracle中的SQL查询中获取固定数量的行[重复]

    这个问题在这里已经有答案了 请帮我在Oracle数据库中编写一个SQL查询 有一个名为 tbl 的表 它有 12 行 我想先选择前 4 行 然后选择下 4 行和最后 4 行 谁能告诉我如何在 Informix 中做到这一点 编辑 现在应该通
  • PySpark 2.x:以编程方式将 Maven JAR 坐标添加到 Spark

    以下是我的 PySpark 启动片段 非常可靠 我已经使用它很长时间了 今天我添加了两个 Maven 坐标 如图所示spark jars packages选项 有效地 插入 Kafka 支持 现在通常会触发依赖项下载 由 Spark 自动执
  • 如何从 PHP 调用网站服务?

    我的问题如下 我的服务器上有一个 EmailReports php 我用它来发送邮件 例如 电子邮件受保护 cdn cgi l email protection 什么 123456 pdf 我无法修改 EmailReports php 因为
  • 快速查找字符串是否在数组中的方法

    在 Ruby 中 查找字符串是否在数组中 include x 非常慢 如果将该数组更改为集合 则BAM 闪电般的快速查找 在 JavaScript 中 没有集合 数组查找 indexOf x gt 0 也是very很慢 但是我需要在脚本中执
  • jquery DomWindow 用于网页上的所有链接

    是否可以实现本页的示例3 http swip codylindley com DOMWindowDemo html http swip codylindley com DOMWindowDemo html适用于网页上的所有链接 不仅仅是带有
  • 如何使用回调机制?

    我必须实施一项信用卡申请 其中我必须只处理一个信用卡帐户 类似的操作credit debit pinChange 但对我来说问题是我必须使用 JAVA CALLBACK 机制在两种情况下通知用户 引脚更改时 当余额低于 5000 时 如何使