WEB/Design Pattern 3

행동 관련 디자인 패턴

책임 연쇄 패턴 public static void main(String[] args) { RequestHandler chain = new AuthRequestHandler(new LoggingRequestHandler(new PrintRequestHandler(null))); Client client = new Client(chain); client.doWork(); } spring security에서 쓰이는 FilterChain 처럼 여러 handler chain을 만든것이다. 하나의 클래스가 하나의 책임을 지니고 조건에 맞으면 일을 처리하고 다름 handler에게 넘겨주는 방식이다. @WebFilter(urlPatterns = "/hello") public class MyFilter implement..

WEB/Design Pattern 2023.01.29

구조 관련 디자인 패턴

어댑터 패턴 기존에는 Account는 security package(건드릴수없는 코드, library) 에 있었던 LoginHandler를 쓸 수 없었다. Login Handler는 UserDetailsService와 연관되어있고 UserDetailsService는 UserDetails를 return 하기 때문이다. 우리가 원하는 것은 AccountService - UserDetailService , Account - UserDetails 처럼 연결하고 싶다 하지만 AccountUserDetailsService , AccountUserDetails 가 중간에 adapter 역할을 하여 client가 LoginHandler를 원할하게 사용이 가능해졌다. public static void main(Strin..

WEB/Design Pattern 2023.01.27

객체 생성 관련 디자인 패턴

싱글턴 패턴 2 public class Settings3 { private static volatile Settings3 instance; private Settings3() { } public static Settings3 getInstance() { if (instance == null) { synchronized (Settings3.class) { if (instance == null) { instance = new Settings3(); } } } return instance; } } instance가 없는 경우에 multithread 환경에서만 synchronized가 락을 잡고 안전하게 싱글톤을 유지하게 되고 평상시 상황에는 락없이 바로 return 하게 된다. 또한 해당 instance가 필..

WEB/Design Pattern 2023.01.26