adapter 패턴은 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다.
인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와준다.
- Client에서는 Target 인터페이스를 볼 수 있다.
- Adapter에서 Target 인터페이스를 구현한다.
- Adapter는 Adaptee로 구성되어 있다.
- 모든 요청이 Adaptee로 위임된다.
- 어댑터는 기존 시스템이 새로운 클래스를 수용할 수 있는 형태로 변환시켜주는 중개인 역할을 한다.
facade 패턴은 서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어 준다
고수준 인터페이스도 정의하므로 서브시스템을 더 편리하게 사용할 수 있다.
객체 사이의 상호작용은 될 수 있으면 아주 가까운 '친구' 사이에만 허용하는 편이 좋다
즉 어떤 객체든 그 객체와 상호작용 하는 클래스의 개수와 상호작용 방식에 주의를 기울여라
public float getTemp() {
// station에서 thermometer라는 객체를 받아서
// 그 객체의 getTemperature() 메서드를 직접 호출해야 한다.
Thermometer thermometer = station.getThermometer();
return thermometer.getTemperature();
}
public float getTemp() {
// 디미터 법칙(최소 지식 원칙)을 적용해서 Station 클래스에
// thermometer에 요청을 해주는 메서드를 추가했다.
// 이렇게 하면, 의존해야 하는 클래스의 개수를 줄일 수 있다.
return station.getTemperature();
}