...
| Code Block | ||
|---|---|---|
| ||
package Bank;
public interface BankApplication {
void depositFunds(BankApplication ba, String username, double amount);
double getBalance(String accountNumber);
double getUserBalance(String accountNumber);
boolean exists(String username);
}
package Account;
import Bank.*; // Import from a third package
class AccountHolderClass {
public synchronized void depositFunds(BankApplication ba, String username, double amount) {
// Use a utility method of UserClass to check if username exists
if(ba.exists(username)) {
// Deposit the amount
}
}
public double getBalance(String accountNumber) {
// Return the account balance
return 1.0;
}
}
package User;
import Account.*; // One way dependency
import Bank.*; // Import from a third package
class UserClass extends AccountHolderClass implements BankApplication {
public synchronized double getUserBalance(String accountNumber) {
// Use a method of AccountHolderClass to get the account balance
return getBalance(accountNumber);
}
public boolean exists(String username) {
// Check if user exists
return true;
}
}
package Implementer;
import Bank.*;
import Account.*;
import User.*;
class BankOperations {
private BankApplication ba;
public BankOperations(BankApplication ba) {
this.ba = ba;
}
public void doUserActions() {
System.out.println(ba.exists("user""user"));
System.out.println(ba.getUserBalance("1111""1111"));
}
public static void main(String[] args) {
AccountHolderClass ac = new AccountHolderClass();
ac.depositFunds(new UserClass(), "user""user", 1.0); // Pass an interface argument
BankOperations bo = new BankOperations(new UserClass());
bo.doUserActions();
}
}
|
...
| Wiki Markup |
|---|
\[[Martin 96|AA. Java References#Martin 96]\] \[[Knoernschild 01|AA. Java References#Knoernschild 01]\] Chapter 1: ""OO Principles and Patterns, 1.2.5 Acyclic Dependencies Principle"" |
...
MSC01-J. Avoid memory leaks 49. Miscellaneous (MSC) IDS01 MSC03-J. Prefer using URIs to URLsIterators over Enumerations