package com.trifulcas.liskov; public abstract class BankAcount { protected double balance; public BankAcount(double balance) { super(); this.balance = balance; } public void Deposit(double amount) { balance += amount; System.out.printf("Deposit: %.2f, Total Amount: %.2f\n", amount, balance); } public abstract void Withdraw(double amount); public double GetBalance() { return balance; } @Override public String toString() { return "BankAcount [balance=" + balance + "]"; } }
package com.trifulcas.liskov; public class RegularAccount extends BankAcount { public RegularAccount(double balance) { super(balance); // TODO Auto-generated constructor stub } @Override public void Withdraw(double amount) { if (balance >= amount) { balance -= amount; System.out.printf("Withdraw: %.2f, Balance: %.2f\n", amount, balance); } else { System.out.printf("Trying to Withdraw: %.2f, Insufficient Funds, Available Funds: %.2f\n", amount, balance); } } }
package com.trifulcas.liskov; public class FixedAccount extends BankAcount { public FixedAccount(double balance) { super(balance); // TODO Auto-generated constructor stub } private boolean termEnded = false; // simplification for the example @Override public void Withdraw(double amount) { if (!termEnded) { System.out.println("Cannot withdraw from a fixed term deposit account until term ends"); } else if (balance >= amount) { balance -= amount; System.out.printf("Withdraw: %.2f, Balance: %.2f\n", amount, balance); } else { System.out.printf("Trying to Withdraw: %.2f, Insufficient Funds, Available Funds: %.2f\n", amount, balance); } } }
package com.trifulcas.liskov; import java.util.ArrayList; public class Customer { private String name; private ArrayList<BankAcount> counts; public Customer(String name) { super(); this.name = name; counts = new ArrayList<>(); } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } public void addRegular(int amount) { counts.add(new RegularAccount(amount)); } public void addFixed(int amount) { counts.add(new FixedAccount(amount)); } public void addAll(int amount) { // Usando Liskov. Todas las subclases se tratan como la superclase for (BankAcount ba : counts) { ba.Deposit(amount); } } @Override public String toString() { return "Customer [name=" + name + ", counts=" + counts + "]"; } }
package com.trifulcas.liskov; public class TestLiskov { public static void main(String[] args) { Customer ana=new Customer("Ana Pi"); ana.addFixed(400); ana.addRegular(300); ana.addFixed(300); System.out.println(ana); ana.addAll(1000); System.out.println(ana); } }