我必须实施信用卡申请,我必须只处理一个信用卡帐户.操作像credit(),debit(),pinChange().
但问题是我必须使用"JAVA CALLBACK"机制在两种情况下通知用户:
如何对这些通知使用回调?
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);
}
}
Run Code Online (Sandbox Code Playgroud)
更改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);
}
}
Run Code Online (Sandbox Code Playgroud)
希望这个清楚......
| 归档时间: |
|
| 查看次数: |
3251 次 |
| 最近记录: |