Mediator

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

Um mediador, em linguagem de programação de computadores, é quem desacopla e gerencia as colaborações entre um grupo de objetos. Define um objeto que encapsula as interações dentro desse grupo.

É um dos 23 padrões de projetos descritos para reutilização de softwares orientados a objetos. Ele permite a unificação da interface de um sistema. Esse padrão é considerado um padrão comportamental devido à maneira como ele pode alterar a execução do software.

Normalmente, um programa é feito por um número muito grande de classes. Então, a lógica e o código são distribuídos entre essas classes. No entanto, quanto mais classes houver no seu projeto, a comunicação entre essas classes será mais complexa. Isso faz com que a leitura e a manutenção do programa fique mais difícil, tal situação acarreta na dificuldade de mudanças no projeto, já que, uma simples mudança pode afetar todo o código e as outras classes.

Com o padrão mediator, a comunicação entre os objetos é encapsulada com um objeto mediador. Isso reduz a dependência entre os objetos que estão se comunicando.

Exemplo[editar | editar código-fonte]

//Colleague interface
interface Command {
    void execute();
}
 
//Concrete mediator
class Mediator {
 
    BtnView btnView;
    BtnSearch btnSearch;
    BtnBook btnBook;
    LblDisplay show;
 
    //....
    void registerView(BtnView v) {
        btnView = v;
    }
 
    void registerSearch(BtnSearch s) {
        btnSearch = s;
    }
 
    void registerBook(BtnBook b) {
        btnBook = b;
    }
 
    void registerDisplay(LblDisplay d) {
        show = d;
    }
 
    void book() {
        btnBook.setEnabled(false);
        btnView.setEnabled(true);
        btnSearch.setEnabled(true);
        show.setText("booking…");
    }
 
    void view() {
        btnView.setEnabled(false);
        btnSearch.setEnabled(true);
        btnBook.setEnabled(true);
        show.setText("viewing…");
    }
 
    void search() {
        btnSearch.setEnabled(false);
        btnView.setEnabled(true);
        btnBook.setEnabled(true);
        show.setText("searching…");
    }
 
}
 
//A concrete colleague
class BtnView extends JButton implements Command {
 
    Mediator med;
 
    BtnView(ActionListener al, Mediator m) {
        super("View");
        addActionListener(al);
        med = m;
        med.registerView(this);
    }
 
    public void execute() {
        med.view();
    }
 
}
 
//A concrete colleague
class BtnSearch extends JButton implements Command {
 
    Mediator med;
 
    BtnSearch(ActionListener al, Mediator m) {
        super("Search");
        addActionListener(al);
        med = m;
        med.registerSearch(this);
    }
 
    public void execute() {
        med.search();
    }
 
}
 
//A concrete colleague
class BtnBook extends JButton implements Command {
 
    Mediator med;
 
    BtnBook(ActionListener al, Mediator m) {
        super("Book");
        addActionListener(al);
        med = m;
        med.registerBook(this);
    }
 
    public void execute() {
        med.book();
    }
 
}
 
class LblDisplay extends JLabel {
 
    Mediator med;
 
    LblDisplay(Mediator m) {
        super("Just start…");
        med = m;
        med.registerDisplay(this);
        setFont(new Font("Arial", Font.BOLD, 24));
    }
 
}
 
class MediatorDemo extends JFrame implements ActionListener {
 
    Mediator med = new Mediator();
 
    MediatorDemo() {
        JPanel p = new JPanel();
        p.add(new BtnView(this, med));
        p.add(new BtnBook(this, med));
        p.add(new BtnSearch(this, med));
        getContentPane().add(new LblDisplay(med), "North");
        getContentPane().add(p, "South");
        setSize(400, 200);
        setVisible(true);
    }
 
    public void actionPerformed(ActionEvent ae) {
        Command comd = (Command) ae.getSource();
        comd.execute();
    }
 
    public static void main(String[] args) {
        new MediatorDemo();
    }
 
}

Componentes[editar | editar código-fonte]

Mediator - define a interface para a comunicação entre objetos "amigos".

ConcreteMediator - implementa a interface e coordena a comunicação entre os objetos ligados.

ConcreteColleague - se comunica com outros objetos através do mediator.

Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.