반응형
목차
어떤 상황에서 쓰일까?
일상생활에서 전등을 킬때, 우리는 스위치 하나만 누르면 된다
스위치를 눌렀을 때 어떤 과정을 거쳐서 전등이 켜지는지 클라이언트 입장에서 알 필요가 있을까? 전혀없다
퍼사드 패턴도 마찬가지이다!
퍼사드 패턴이란?
클라이언트가 사용해야하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화 하는 패턴이다
퍼사드 패턴은 클라이언트 애플리케이션의 헬퍼 역할일 뿐이지,
서브시스템 인터페이스를 숨기는 것은 아니다!
또한 퍼사드패턴은 서브시스템을 여러 곳에서 사용할 때 적용하면 이점이 있는 패턴이다!
장점
- 서브 시스템에 대한 의존성을 한곳으로 모을 수 있다
- 서브 시스템을 각 역할에 맞게 분리하여 재사용할 수 있다
단점
- 클라이언트에게 있던 의존성이 그대로 퍼사드 클래스로 옮겨오게된다.
구현코드
기존코드
public class Client {
public static void main(String[] args) {
String to = "keesun@whiteship.me";
String from = "whiteship@whiteship.me";
String host = "127.0.0.1";
//메일 셋팅 설정
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
//메일 내용 설정
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Test Mail from Java Program");
message.setText("message");
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
클라이언트는 메일을 보내기만 하면된다!
설정에 대한 부분을 굳이 클라이언트 단에 노출시키지 않아도 된다.
변경코드
@Getter @Setter
public class 💚EmailSettings {
private String host;
}
-------------------------------------------------
@Getter @Setter
public class 💙EmailMessage {
private String from;
private String to;
private String cc;
private String bcc;
private String subject;
private String text;
}
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");
💙EmailMessage emailMessage = new EmailMessage();
emailMessage.setFrom("keesun");
emailMessage.setTo("whiteship");
emailMessage.setCc("일남");
emailMessage.setSubject("오징어게임");
emailMessage.setText("밖은 더 지옥이더라고..");
EmailSender emailSender = new EmailSender(💚emailSettings);
emailSender.sendEmail(💙emailMessage);
}
}
반응형
'Computer Science' 카테고리의 다른 글
Proxy Pattern | 프록시 패턴 (0) | 2022.08.16 |
---|---|
Flyweight Pattern | 플라이웨이트 패턴 (0) | 2022.08.16 |
Decorator Pattern | 데코레이터 패턴 (0) | 2022.08.16 |
Composite Pattern | 컴포짓 패턴 (0) | 2022.08.15 |
Bridge Pattern | 브릿지 패턴 (0) | 2022.08.15 |