Adapter 패턴이란?

스크린샷 2023-09-30 오후 1.19.42.png

구현하기

Target과 Client

// target interface
public interface UserDetails {
    String getUsername();
    String getPassword();
}

// target interface
public interface UserDetailsService {
    UserDetails loadUser(String username);
}

// client
public class LoginHandler {

    UserDetailsService userDetailsService;

    public LoginHandler(UserDetailsService userDetailsService) {
        this.userDetailsService = userDetailsService;
    }

    public String login(String username, String password) {
        UserDetails userDetails = userDetailsService.loadUser(username);
        if (userDetails.getPassword().equals(password)) {
            return userDetails.getUsername();
        } else {
            throw new IllegalArgumentException();
        }
    }
}

Adaptee

타겟과 겹치는 인터페이스가 없음

public class Account {
    private String name;
    private String password;
    private String email;
		// getter, setter
}

public class AccountService {

    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) {

    }

}