Account 구현
클래스 다이어그램
소스코드
import java.util.Date;
public abstract class Account {
int balance = 0;
int limits = 0;
Date endDate = null;
WithdrawBehavior withdrawBehavior;
CalculateIntrestBehavior calculateIntrestBehavior;
public int getBalance(){throw new UnsupportedOperationException();}
public void deposit(int i){throw new UnsupportedOperationException();}
public void withdraw(int i ){
balance = withdrawBehavior.withdraw(i, balance, limits, endDate);
}
public int calculateIntrest(){
return calculateIntrestBehavior.calculateIntrest(balance);
}
}
public interface CalculateIntrestBehavior {
int calculateIntrest(int balance);
}
import java.util.Date;
public interface WithdrawBehavior {
int withdraw(int i, int balance, int limits, Date endDate);
}
- CalculateIntrestWithMinus
public class CalculateIntrestWithMinus implements CalculateIntrestBehavior{
@Override
public int calculateIntrest(int balance) {
if(balance >= 0){
return 0;
}
return balance * -7;
}
}
- CalculateIntrestWithNomal
public class CalculateIntrestWithNomal implements CalculateIntrestBehavior{
@Override
public int calculateIntrest(int balance) {
return balance * 3 / 100;
}
}
- CalculateIntrestWithSaving
public class CalculateIntrestWithSaving implements CalculateIntrestBehavior{
@Override
public int calculateIntrest(int balance) {
return balance * 5 / 100;
}
}
import java.util.Date;
public class WithdrawWithMinus implements WithdrawBehavior{
@Override
public int withdraw(int i, int balance, int limits, Date endDate) {
if(i <= balance + limits){
int result = balance - i;
System.out.println(i + "원이 출금됐습니다.");
System.out.println("잔액 : " + result + "원");
return result;
}else{
System.out.println("잔액이 부족합니다.");
return balance;
}
}
}
import java.util.Date;
public class WithdrawWithNomal implements WithdrawBehavior{
@Override
public int withdraw(int i, int balance, int limits, Date endDate) {
if(i <= balance){
int result = balance - i;
System.out.println(i + "원이 출금됐습니다.");
System.out.println("잔액 : " + result + "원");
return result;
}else{
System.out.println("잔액이 부족합니다.");
return balance;
}
}
}
import java.util.Date;
public class WithdrawWithSaving implements WithdrawBehavior{
@Override
public int withdraw(int i, int balance, int limits, Date endDate) {
if(endDate.before(new Date())){
if(i <= balance){
int result = balance - i;
System.out.println(i + "원이 출금됐습니다.");
System.out.println("잔액 : " + result + "원");
return result;
}else{
System.out.println("잔액이 부족합니다.");
return balance;
}
}else{
System.out.println("아직 만기일이 아닙니다.");
return balance;
}
}
}
public class Minus extends Account{
public Minus(int balance, int limits){
this.balance = balance;
this.limits = limits;
calculateIntrestBehavior = new CalculateIntrestWithMinus();
withdrawBehavior = new WithdrawWithMinus();
}
public int getBalance(){
return balance;
}
}
public class Nomal extends Account{
public Nomal(int balance){
this.balance = balance;
calculateIntrestBehavior = new CalculateIntrestWithNomal();
withdrawBehavior = new WithdrawWithNomal();
}
public int getBalance(){
return balance;
}
}
import java.util.Date;
public class Saving extends Account{
public Saving(int balance, Date endDate){
this.balance = balance;
this.endDate = endDate;
calculateIntrestBehavior = new CalculateIntrestWithSaving();
withdrawBehavior = new WithdrawWithSaving();
}
public int getBalance(){
return balance;
}
}
public class AccountSimulator {
public static void main(String[] args){
Account account1, account2, account3;
account1 = new Minus(10000,10000);
account2 = new Nomal(10000);
account3 = new Saving(10000, new Date(2022,5,1,20,0,0));
account1.getBalance();
account2.getBalance();
account3.getBalance();
System.out.println("이자 : " + account1.calculateIntrest() + "원");
System.out.println("이자 : " + account2.calculateIntrest() + "원");
System.out.println("이자 : " + account3.calculateIntrest() + "원");
account1.withdraw(12000);
account2.withdraw(5000);
account3.withdraw(5000);
}
}
실행 결과