클라이언트는 Component를 사용해서 실제 객체를 사용하게 된다.
예시
Facade : client의 요청을 Subsystem에 전달하는 단순하고 일관된 통합 인터페이스
Subsystem : Facade에 대한 정보를 가지지 않는 서브시스템
public interface EmailSender {
public void sendEmail(EmailMessage emailMessage);
}
public class DefaultEmailSender implements EmailSender {
private EmailSettings emailSettings;
public DefaultEmailSender(EmailSettings emailSettings) {
this.emailSettings = emailSettings;
}
@Override
public void sendEmail(EmailMessage emailMessage) {
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", emailSettings.getHost());
//Session,Properties,MimeMessage,Transport 등 client가 가지고 있던 의존성을 Facade가 대신한다.
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.setSubject(emailMessage.getSubject());
message.setText(emailMessage.getText());
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
//client의 의존 객체들
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class Client {
public static void main(String[] args) {
String to = "kkk@naver.com";
String from = "jjj@naver.com";
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");
message.setText("message");
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
public class Client {
public static void main(String[] args) {
EmailSettings emailSettings = new EmailSettings();
emailSettings.setHost("123.0.0.1");
EmailMessage emailMessage = new EmailMessage();
EmailSender EmailSender = new DefaultEmailSender(emailSettings);
emailMessage.setFrom("Hy");
emailMessage.setTo("kk");
emailMessage.setSubject("제목");
emailMessage.setText("텍스트");
EmailSender.sendEmail(emailMessage);
}
}
/**
* MailSender 퍼싸드 인터페이스 특정 기술에 종속적이지 않음
* 뒤로 JavaMailSenderImpl을 이용해 숨긴것 것
* 실질적으로 사용하는것은 JavaMailSenderImpl
* */
MailSender mailSender = new JavaMailSenderImpl();
/**
* PlatformTransactionManager 퍼싸드 인터페이스 특정 기술에 종속적이지
* 뒤로 JdbcTransactionManager 이용해 숨긴것 것
* 실질적으로 사용하는것은 JdbcTransactionManager
* */
PlatformTransactionManager platformTransactionManager = new JdbcTransactionManager();
출처 : 백기선님의 디자인패턴