Статьи

Структурные шаблоны проектирования: шаблон адаптера

В предыдущих сообщениях в блоге мы сосредоточились на шаблонах креативного дизайна, таких как шаблон компоновщика , абстрактный шаблон фабрики / фабрики , синглтон и шаблон прототипа .

Мы переключим наше внимание на структурные шаблоны проектирования. Используя шаблоны структурного проектирования, наша цель состоит в том, чтобы упростить проект путем определения простого способа реализации отношений между объектами.

Шаблон адаптера является одним из наиболее часто используемых и известных структурных шаблонов. Его основное использование — когда вы хотите, чтобы классы работали с другими классами без необходимости изменения его исходного кода.

Представьте себе сценарий рефакторинга некоторого кода, и вы наткнетесь на класс, отправляющий электронные письма.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.gkatzioura.design.structural.adapter;
 
import java.util.List;
 
public class MailSender {
 
    private String title;
    private String message;
    private List<String> recipients;
 
    public MailSender(String title, String message, List<String> recipients) {
        this.title = title;
        this.message = message;
        this.recipients = recipients;
    }
 
    public void sendMessage() {
 
    }
 
    public void sendHtmlMessage(String htmlTemplate) {
 
    }
 
}

Класс MailSender имеет возможность отправлять электронную почту, но вы также можете использовать ее для отправки электронной почты, содержащей html.

Мы хотим добавить некоторые функции подписки / уведомления в нашу базу кода, чтобы люди могли получать простые сообщения в виде смс, электронной почты, веб-хуков и т. Д.

Мы также придумали интерфейс для уведомлений.

1
2
3
4
5
6
7
package com.gkatzioura.design.structural.adapter;
 
public interface Notifier {
 
    void notify(String recipients,String message);
 
}

Как вы можете видеть, наше действие по уведомлению не заботится о теме или форматировании сообщения. Вы просто должны уведомить подписчиков. Среди остальной реализации должна быть предусмотрена реализация по электронной почте. Мы можем либо предоставить новую реализацию электронной почты, которая реализует интерфейс уведомителя, либо мы можем изменить исходный класс электронной почты.

Однако есть и третий вариант. Вы можете использовать шаблон адаптера и создать класс, чтобы вы могли повторно использовать свой старый класс электронной почты.

Делая это, вы не изменяете свой старый класс электронной почты и, следовательно, код, который использует его функциональность, а также вы пропускаете создание нового класса, поэтому приходится поддерживать один дополнительный класс.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
package com.gkatzioura.design.structural.adapter;
 
import java.util.List;
 
public class MailNotifierAdapter implements Notifier {
 
    private static final String NOTIFICATION_TITLE = "System notification";
     
    public void notify(List<String> recipients, String message) {
         
        MailSender mailSender = new MailSender(NOTIFICATION_TITLE,message,recipients);
        mailSender.sendMessage();
    }
}

Вы можете найти исходный код на github .

Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. Смотрите оригинальную статью здесь: Структурные шаблоны проектирования: шаблон адаптера

Мнения, высказанные участниками Java Code Geeks, являются их собственными.