Object) Connect to Strategy Object (Plan2)
next필드를 이용하여 전략객체들이 다음 타자를 가지고 있도록 연결
📜 제목으로 보기
- context를 인자로 공유하는, 연결될 합성객체는 개별로 [생성자 주입받는 다음타자 next필드] + [return null터미네이닝 재귀호출]로 연결된다.(실습)
- 유사 데코레이터 패턴의 Clinet코드 및 내부 중복로직을 추상클래스로 제거하기(설명)
context를 인자로 공유하는, 연결될 합성객체는 개별로 [생성자 주입받는 다음타자 next필드] + [return null터미네이닝 재귀호출]로 연결된다.(실습)
-
연결합성객체는 재귀처럼 다음 연결된 합성객체를 호출한다.
- 재귀처럼 호출하려면, if 종착역 끝 + return 종착역 아니면 다음타자 호출한다.
- 종착역은 다음타자가 null으로서 없을 때 누적변수를 반환하는 것이다.
- 전략객체는 전략메서드로서 시그니처가 통일되었으므로 주체만 next필드에 미리 담아놓아야한다 -> 생성자 주입 받는다.
- 만약, 생성자 주입에서 null이 입력되면, 다음타자는 없는 것으로 한다.
- 재귀처럼 호출하려면, if 종착역 끝 + return 종착역 아니면 다음타자 호출한다.
-
PricePerTime
-
생성자로 동급의 다음 합성객체(전략객체)를 주입받는다.
- 이후 client에서 사용은 데코레이터 패턴처럼 포장하는 모양을 가지게 된다.
- 나의 할일이 끝나고, return문에 재귀함수처럼 next필드에 있는 다음타자의 전략메서드를 호출하되, 다음타자가 없으면
== null
현재의 결과누적변수를 반환한다.
-
생성자로 동급의 다음 합성객체(전략객체)를 주입받는다.
-
early return + 바로 return은 3항연산자로 변경할 수 있다.
-
나머지
NightDiscount
는 같은 처리 -
Tex
전략객체는 새로 추가해준다. ratio만큼 세금만 뗀다. -
AmountDiscount
도 추가한다. -
Main에서 사용법
-
각 전략객체를
데코레이터 패턴으로 생성자 주입
하면, 콜백 지옥의 장풍형태가 만들어진다. -
다음 타자가 없을 경우,
생성자에 null을 입력하여 터미네이팅하는 재귀호출
형태다.
-
유사 데코레이터 패턴의 Clinet코드 및 내부 중복로직을 추상클래스로 제거하기(설명)
-
client에서 사용하는 유사 데코레이터 패턴의 생성자 체이닝 (문제점)
-
내부에 존재하는 유사 데코레이터 패턴 로직
-
문제점 파악하기
-
전략객체들이 직접 다음타자 주입 + next필드 + 재귀호출부를 가져
코드중복
이 발생한다. 중복코드는 템플릿메소드형태의추상클래스
로 제거한다. -
중복제거를 위해 올린 생성자 주입 ->
부모 추상클래스
는좋은 상속조건에 의해 생성자 주입을 받지 않는다.
에 의해생성자 주입 대신 setter받기기능
을 사용하되,return this를 이용한 [setter 체이닝 받기기능]
를 이용한다.- setter체이닝받기는
받기기능의 주체 = 받고난 뒤 return되는 객체
가 동일해야한다.
- setter체이닝받기는
-