장점 : 기존 코드를 변경하지 않고 인터페이스 구현체를 만들어서 재사용이 가능함(Ocp)
코드가 하던 일과 특정 인터페이스 구현체로 변환하는 작업을 각기 다른 클래스로 분리하고 관리할 수 있음. (단일 책임 원칙)
클라이언트는 -> 타깃 인터페이스만 사용하고
Adaptee(기존 제품)과 target 과의 사이를 메꿔주는 Adapter를 구현하는 것이 목표
public class AccountService implements UserDetailsService { //target interface 상속
public Account findAccountByUsername(String username) {
Account account = new Account();
account.setName(username);
account.setPassword(username);
account.setEmail(username);
return account;
}
public void createNewAccount(Account account) {
}
public void updateAccount(Account account) {
}
@Override // 구현
public UserDetails loadUser(String username) {
return findAccountByUsername(username); //여기서 마찬가지로 Account 객체 또한 UserDetails를 상속해야함
}
}
public class AccountUserDetailsService implements UserDetailsService {
AccountService accountService;
public AccountUserDetailsService(AccountService accountService) {
this.accountService = accountService;
}
@Override
public UserDetails loadUser(String username) {
Account account = accountService.findAccountByUsername(username);
return new AccountUserDetails(account);
}
}
List<String> strings = Arrays.asList("1", "2", "3");
출처 : 백기선님의 디자인패턴