我必须实施信用卡申请,我必须只处理一个信用卡帐户.操作像credit()
,debit()
,pinChange()
.
但问题是我必须使用"JAVA CALLBACK"机制在两种情况下通知用户:
在引脚更改
当余额低于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); } }
SandeepGodar.. 6
更改Pin并获得低平衡是CreditCard的行为,因此CreditCard对象是事件生成器而非事件侦听器,因此您不希望将CreditCard设置为侦听器(CallBack).
实际上,当发生任何类似pinChange或lowBalance的事件时,您的CreditCard将回调您想要通知的侦听器的方法.
您的代码应如下所示:
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); } }
希望这个清楚......