«Шаблоны проектирования» (Шаблон-посредник/Шаблон-посредник)

1. Предисловие_ _

Наша жизнь повсюду наполнена «посредниками», например, вам может понадобиться помощь этих посредников при аренде жилья, покупке дома, поиске работы, путешествии и т. д. Отношения между странами на земле чрезвычайно сложны, и это может произойти по разным причинам.Чтобы сформировать союзников или врагов на основе таких интересов, отношения между странами также будут меняться с течением времени и окружающая среда из-за интересов.Крупнейшим посредником на земле является Организация Объединенных Наций, которая в основном используется для поддерживать международный мир и безопасность, решать международные проблемы экономического, социального, культурного и гуманитарного характера. То же самое относится и к процессу разработки программного обеспечения. Между объектами существуют прочные и сложные связи. Если нет такой «организации», как Организация Объединенных Наций, легко возникнут проблемы, такие как:

  • (1) Структура системы стала очень сложной , и между объектами существует большое количество связей. Если объект изменяется, связанные с ним объекты также необходимо обрабатывать соответствующим образом.
  • (2) Увеличение связей между объектами приводит к снижению возможности повторного использования объектов.
  • (3) Масштабируемость системы низкая . Чтобы добавить новый объект, нам необходимо добавить ссылки на связанные с ним объекты. Это увеличит связанность системы и уменьшит гибкость и масштабируемость системы.

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

2. Что такое промежуточная модель?

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

В шаблоне посредника класс-посредник лежит в основе. Он инкапсулирует отношения между всеми классами объектов в системе. Помимо упрощения отношений между объектами, он также может дополнительно контролировать взаимодействие между объектами.

3. Структурная диаграмма UML

Mediator: абстрактный посредник, определяет интерфейс между объектами-коллегами и объектами-посредниками.
ConcreteMediator: конкретный посредник, реализует метод абстрактного посредника. Ему необходимо знать все конкретные классы-коллеги и необходимо получать информацию от конкретных классов-коллег. и отправлять информация другим конкретным классам коллег.
Коллега: абстрактный класс коллег.
ConcreteColleague: конкретный класс коллег. Каждому конкретному классу коллег нужно знать только свое собственное поведение, но всем им необходимо знать посредника.

Из структурной диаграммы классов UML видно, что в системе промежуточный класс отвечает в основном за два аспекта: передачу и координацию:

  • Структурно он играет роль ретранслятора: благодаря инкапсуляции отношений классом-посредником классу объекта больше не требуется явно ссылаться на другие объекты, и он может взаимодействовать с другими классами объектов только через посредника.
  • Играет координирующую роль в поведении: благодаря инкапсуляции отношений классом-посредником класс объекта может осуществлять связь с другими объектами через посредника, не зная других объектов. В этом процессе классу объекта не нужно указывать посреднику, что делать.Посредник может координировать действия в соответствии со своей собственной логикой, далее обрабатывать запросы коллег, а также разделять и инкапсулировать поведение отношений между членами коллег.

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

Наконец, моделью-посредником также относительно легко злоупотребить. Поэтому, когда в системе появляется сложная интерактивная группа отношений «многие-ко-многим», не спешите использовать модель-посредника. Первое, что вам нужно сделать, это поразмышлять о вашей системе. Разумна ли она по дизайну?

4. Реализация кода

В качестве примера возьмем аренду дома: агентство выступает посредником между арендатором и владельцем дома.

Первый — абстрактный посредник: Mediator.java.

public abstract class Mediator {
    //申明一个联络方法
    public abstract void constact(String message,Person person);
}

 Затем есть абстрактный объект-коллега: Person.java.

public class HouseOwner extends Person{
 
    HouseOwner(String name, Mediator mediator) {
        super(name, mediator);
    }
    
    /**
     * @desc 与中介者联系
     * @param message
     * @return void
     */
    public void constact(String message){
        mediator.constact(message, this);
    }
 
    /**
     * @desc 获取信息
     * @param message
     * @return void
     */
    public void getMessage(String message){
        System.out.println("房主:" + name +",获得信息:" + message);
    }
}

Тенант.java

public class Tenant extends Person{
    
    Tenant(String name, Mediator mediator) {
        super(name, mediator);
    }
    
    /**
     * @desc 与中介者联系
     * @param message
     * @return void
     */
    public void constact(String message){
        mediator.constact(message, this);
    }
 
    /**
     * @desc 获取信息
     * @param message
     * @return void
     */
    public void getMessage(String message){
        System.out.println("租房者:" + name +",获得信息:" + message);
    }
}

Конкретный объект-посредник: структура-посредник, MediatorStructure.java

public class MediatorStructure extends Mediator{
    //首先中介结构必须知道所有房主和租房者的信息
    private HouseOwner houseOwner;
    private Tenant tenant;
 
    public HouseOwner getHouseOwner() {
        return houseOwner;
    }
 
    public void setHouseOwner(HouseOwner houseOwner) {
        this.houseOwner = houseOwner;
    }
 
    public Tenant getTenant() {
        return tenant;
    }
 
    public void setTenant(Tenant tenant) {
        this.tenant = tenant;
    }
 
    public void constact(String message, Person person) {
        if(person == houseOwner){          //如果是房主,则租房者获得信息
            tenant.getMessage(message);
        }
        else{       //反之则是获得房主信息
            houseOwner.getMessage(message);
        }
    }
}

Клиент: Client.java

public class Client {
    public static void main(String[] args) {
        //一个房主、一个租房者、一个中介机构
        MediatorStructure mediator = new MediatorStructure();
        
        //房主和租房者只需要知道中介机构即可
        HouseOwner houseOwner = new HouseOwner("张三", mediator);
        Tenant tenant = new Tenant("李四", mediator);
        
        //中介结构要知道房主和租房者
        mediator.setHouseOwner(houseOwner);
        mediator.setTenant(tenant);
        
        tenant.constact("听说你那里有三室的房主出租.....");
        houseOwner.constact("是的!请问你需要租吗?");
    }
}

результат операции:

Арендодатель: Чжан Сан, получил информацию: Я слышал, что вы сдаете в аренду дом с тремя спальнями... 
Арендатор: Ли Си, получил информацию: Да, вам нужно его арендовать?  

Адрес справочной статьи:  Поведенческий шаблон проектирования Java: шаблон посредника_Блог Чжана Вейпэна-CSDN Blog_java Mediator Pattern

Supongo que te gusta

Origin blog.csdn.net/m0_50370837/article/details/126254131
Recomendado
Clasificación