
Mr Jin let me solve above one,
I missed real meaning and I just got class name
But after gemini, they were sharing that this is for adapter.
It was that difficult point for me
and I just realized should code adapter class like child part..
but in the child part, should write down Paypal
method is from main.
main using interface format again.
package oop4practice.eg21adapter_recheck;
import java.util.Scanner;
//결제 처리기 인터페이스
interface PayProcessor
{
void processPay();
}
//기본 결제 처리자
class DefaultProcessor implements PayProcessor
{
public void processPay()
{
System.out.println("결제 요청 처리중");
System.out.println("처리 완료");
}
}
//문제
//외부 결제 api-> 바꿀 수 없음!->소스를 바꿀 수 없고 진행 되게끔만 만들것
class PayPalAPI
{
public void handlePay(String apikey)
{
System.out.println("API 키 확인중 "+apikey);
System.out.println("페이팔 결제 요청 처리중");
System.out.println("처리 완료");
}
}
class PayPalAdapter implements PayProcessor
{
private PayPalAPI payPalAPI; //변수는 페이팔꺼로
public PayPalAdapter(PayPalAPI payPalAPI) //메소드도 페이팔 어댑터로
{
this.payPalAPI = payPalAPI;
}
//실행
public void processPay() //하지만 실행결과 폼은 부모 메소드로
{
payPalAPI.handlePay("Paypal_recognized");
}
}
class DanalAPI
{
public void handlePay(String apikey)
{
System.out.println("API 키 확인중 "+apikey);
System.out.println("다날 결제 요청 처리중");
System.out.println("처리 완료");
}
}
//주문 처리 객체
class OrderService
{
PayProcessor payProcessor;
OrderService(PayProcessor payProcessor)
{
this.payProcessor = payProcessor;
}
void processOrder()
{
System.out.println("주문 접수 ");
System.out.println("결제를 시작합니다. ");
payProcessor.processPay();
System.out.println("주문 완료 ");
}
}
public class Main
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
System.out.println("결제 수단을 선택하세요 (1: 페이팔, 2: 다날");
int nPaySystem = scanner.nextInt();
PayProcessor payProcessor; //메인에서의 변수는 그대로
switch (nPaySystem)
{
case 1:
payProcessor = new PayPalAdapter(new PayPalAPI()); //변수에서 페이팔 어댑터를 통해서 페이팔을 선택한다.
break;
default:
System.out.println("결제 오류 - 매치되는 결제 시스템 없음");
payProcessor = new DefaultProcessor();
break;
}
OrderService orderService = new OrderService(payProcessor); //오더 서비스도 인터페이스 문법 그대로 //생성자에 해당 아이템을 삽입하는것과 같음
orderService.processOrder();
scanner.close();
}
}