구조 패턴: 퍼사드 패턴

소개

복잡한 서브 시스템 의존성을 최소화하는 방법이다.

1) 장점

서브 시스템에 대한 의존성을 한 곳으로 모을 수 있다.

2) 단점

퍼사드 클래스가 서브 시스템에 대한 모든 의존성을 가지게 된다.


적용전: 이메일을 전송하는 코드

public class Client {
	public static void main(String[] args) {
    	String to = "[email protected]";
        String from = "[email protected]";
        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");
            message.setText("message");
            
            Transport.send(message);
        } catch (MessagingException e) {
        	e.printStackTrace();
        }
    }
}

적용후

클래스를 각각 이메일 설정을 담당하는 클래스, 메시지를 담당하는 클래스, 이미지를 보내는 클래스로 각각 나누었다.

1) EmailSettings

@Getter
@Setter
public class EmailSettings {
	private String host;
}

2) EmailSender

public class EmailSender {
	private EmailSettings emailSettings;
    
   	public EmailSender(EmailSettings emailSettings) {
    	this.emailSettings = emailSettings;
    }
    
    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 (MessageingException e) {
        	e.printStackTrace();
        }
    }
}

3) EmailMessage

@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 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("zenon");
        emailMessage.setTo("xellos");
        emailMessage.setCc("alpha");
        emailMessage.setSubject("TEST MAIL");
        emailMessage.setText("메세지 테스트");
        
        emailSender.sendEmail(emailMessage);
    }
}

좋은 웹페이지 즐겨찾기