복잡한 서브 시스템 의존성을 최소화하는 방법
클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화할 수 있다
public class EmailSettings {
private String host;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
}
public class EmailSender {
private EmailSettings emailSettings;
public EmailSender(EmailSettings emailSettings) {
this.emailSettings = emailSettings;
}
/**
* 이메일 보내는 메소드
* @param emailMessage
*/
public void sendEmail(EmailMessage emailMessage) {
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", emailSettings.getHost());
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailMessage.getFrom()));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(emailMessage.getTo()));
message.addRecipient(Message.RecipientType.CC, new InternetAddress(emailMessage.getCc()));
message.setSubject(emailMessage.getSubject());
message.setText(emailMessage.getText());
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
public class Client {
public static void main(String[] args) {
EmailSettings emailSettings = new EmailSettings();
emailSettings.setHost("127.0.0.1");
EmailSender emailSender = new EmailSender(emailSettings);
EmailMessage emailMessage = new EmailMessage();
emailMessage.setFrom("keesun");
emailMessage.setTo("whiteship");
emailMessage.setCc("일남");
emailMessage.setSubject("오징어게임");
emailMessage.setText("밖은 더 지옥이더라고..");
emailSender.sendEmail(emailMessage);
}
}
Facade 패턴은 특별한 프로그래밍 방법이 있는것 같지는 않다. 단지 클라이언트에서 구현해야할 로직을 한번 더 클래스와 메서드로 감싸서 클라이언트는 오직 단순히 함수를 호출하는 방식으로 구현하는 것 같다.
- 장점
- 서브 시스템에 대한 의존성을 한곳으로 모을 수 있다
- 단점
- 퍼사드 클래스가 서브 시스템에 대한 모든 의존성을 가지게 된다
'java' 카테고리의 다른 글
Design Patterns - Proxy (0) | 2022.01.16 |
---|---|
Design Patterns - Flyweight (0) | 2021.12.21 |
Design Patterns - Decorator (0) | 2021.12.04 |
Design Patterns - Composite (0) | 2021.11.29 |
Design Patterns - Bridge (0) | 2021.11.28 |
댓글