4. ISP
Interface Segregation Principle (ISP; 인터페이스 분리 원칙)
Last updated
Interface Segregation Principle (ISP; 인터페이스 분리 원칙)
Last updated
public class DepositTransaction extends Transaction implements UI {
@Override public void requestDepositAmount() {
System.out.println("Request deposit");
}
@Override public void requestWithdrawalAmount() {
throw new UnsupportedMethodException("Can not withdrawal at Deposit Transaction");
}
@Override public void requestTransferAmount() {
throw new UnsupportedMethodException("Can not transfer at Deposit Transaction");
}
@Override public void execute() {
requestDepositAmount();
}
}public class WithdrawalTransaction extends Transaction implements UI {
@Override public void requestDepositAmount() {
throw new UnsupportedMethodException("Can not deposit at Withdrawal Transaction");
}
@Override public void requestWithdrawalAmount() {
System.out.println("Request withdrawal");
}
@Override public void requestTransferAmount() {
throw new UnsupportedMethodException("Can not transfer at Withdrawal Transaction");
}
@Override public void execute() {
requestWithdrawalAmount();
}
}public class TransferTransaction extends Transaction implements UI {
@Override public void requestDepositAmount() {
throw new UnsupportedMethodException("Can not deposit at Transfer Transaction");
}
@Override public void requestWithdrawalAmount() {
throw new UnsupportedMethodException("Can not withdrawal at Transfer Transaction");
}
@Override public void requestTransferAmount() {
System.out.println("Request transfer");
}
@Override public void execute() {
requestTransferAmount();
}
}// integrated interface for general
public interface UI extends DepositUI, WithdrawalUI, TransferUI {}
// segregated interface
public interface DepositUI {
void requestDepositAmount();
}
public interface TransferUI {
void requestTransferAmount();
}
public interface WithdrawalUI {
void requestWithdrawalAmount();
}public class DepositTransaction extends Transaction {
private DepositUI depositUI;
public DepositTransaction(DepositUI ui) {
depositUI = ui;
}
@Override
public void execute() {
depositUI.requestDepositAmount();
}
}public class WithdrawalTransaction extends Transaction {
private WithdrawalUI withdrawalUI;
public WithdrawalTransaction(WithdrawalUI ui) {
withdrawalUI = ui;
}
@Override
public void execute() {
withdrawalUI.requestWithdrawalAmount();
}
}public class TransferTransaction extends Transaction {
private TransferUI transferUI;
public TransferTransaction(TransferUI ui) {
transferUI = ui;
}
@Override
public void execute() {
transferUI.requestTransferAmount();
}
}public void testFunction() {
Transaction custom = new TransferTransaction(new TransferUI() {
@Override
public void requestTransferAmount() {
System.out.println("Request transfer for me");
}
});
custom.execute();
}