AOP 프록시 패턴

구름코딩·2020년 10월 13일
0

인터페이스 Payment (결제 인터페이스)

public interface Payment {
	void pay(int amount);
}

Store class

public class Store {

	Payment payment;

	public Store(Payment payment) {
		this.payment = payment;
	}

	public void buySomething(int amount){
		payment.pay(amount);
	}
}

Cash class (현금 결제 클래스)

public class Cash implements Payment{

	@Override
	public void pay(int amount) {
		System.out.println(amount +"원 현금 결제");
	}
}

CashPerf class (프록시를 설정한 CashPref)

public class CashPerf implements Payment{

	//현금결제는 유지
	Payment cash = new Cash();

	@Override
	public void pay(int amount) {
		StopWatch stopWatch = new StopWatch();
		stopWatch.start();

		//Cash 클래스에는 변경이없고 위아래로 StopWatch클래스를 사용한다
		cash.pay(amount);

		stopWatch.stop();
		System.out.println(stopWatch.prettyPrint());
	}
}

Store에서 Cash를 이용한 buySomething() (main함수)

public class StoreTest {

	public static void main(String[] args) {
		testPay();
	}

	public static void testPay(){
    	//Cash클래스의 pay를 감싸고있는 CashPerf의 apy를 사용한다
		Payment cashPerf = new CashPerf();
		Store store = new Store(cashPerf);
		store.buySomething(100);
	}
}

//출력
100원 현금 결제
StopWatch '': running time = 374301 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
000374301  100%  

Cash클래스는 건들이지 않고 CashPerf라는 클래스를 이용하여 Cash의 pay메소드 주변에 추가적인 구현만 한 모습이다
만약, Main함수에서 CashPerf()가 아닌 Cash()클래스로 생성자 생성시 Cash의 pay메소드가 실행된다 -> 100원 현금 결제

profile
내꿈은 숲속의잠자는공주

0개의 댓글