您的位置:首页 > 其它

行为模式: Mediator(中介者)

2013-02-07 20:43 232 查看
With the mediator pattern, communication between objects is encapsulated with a mediator object. Objects no longer communicate directly with each other, but instead communicate through the mediator. This reduces the dependencies between communicating objects, thereby lowering the coupling.
Mediator - defines the interface for communication between Colleague objects
ConcreteMediator - implements the Mediator interface and coordinates communication between Colleague objects. It is aware of all the Colleaguesand their purpose with regards to inter communication.
ConcreteColleague - communicates with other Colleagues through its Mediator
import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;//Colleague interfaceinterface Command {void execute();}//Abstract Mediatorinterface IMediator {public void book();public void view();public void search();public void registerView(BtnView v);public void registerSearch(BtnSearch s);public void registerBook(BtnBook b);public void registerDisplay(LblDisplay d);}//Concrete mediatorclass Mediator implements IMediator {BtnView btnView;BtnSearch btnSearch;BtnBook btnBook;LblDisplay show;//....public void registerView(BtnView v) {btnView = v;}public void registerSearch(BtnSearch s) {btnSearch = s;}public void registerBook(BtnBook b) {btnBook = b;}public void registerDisplay(LblDisplay d) {show = d;}public void book() {btnBook.setEnabled(false);btnView.setEnabled(true);btnSearch.setEnabled(true);show.setText("booking...");}public void view() {btnView.setEnabled(false);btnSearch.setEnabled(true);btnBook.setEnabled(true);show.setText("viewing...");}public void search() {btnSearch.setEnabled(false);btnView.setEnabled(true);btnBook.setEnabled(true);show.setText("searching...");}}//A concrete colleagueclass BtnView extends JButton implements Command {IMediator med;BtnView(ActionListener al, IMediator m) {super("View");addActionListener(al);med = m;med.registerView(this);}public void execute() {med.view();}}//A concrete colleagueclass BtnSearch extends JButton implements Command {IMediator med;BtnSearch(ActionListener al, IMediator m) {super("Search");addActionListener(al);med = m;med.registerSearch(this);}public void execute() {med.search();}}//A concrete colleagueclass BtnBook extends JButton implements Command {IMediator med;BtnBook(ActionListener al, IMediator m) {super("Book");addActionListener(al);med = m;med.registerBook(this);}public void execute() {med.book();}}class LblDisplay extends JLabel {IMediator med;LblDisplay(IMediator m) {super("Just start...");med = m;med.registerDisplay(this);setFont(new Font("Arial", Font.BOLD, 24));}}class MediatorDemo extends JFrame implements ActionListener {IMediator 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();}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: