Thứ Sáu, 12 tháng 4, 2013

Mediator

1. Khái niệm

Mediator pattern định nghĩa 1 đối tượng bao quát các tương tác của một tập hợp các đối tượng khác.

Meditator hướng đến việc gỡ bỏ các liên kết của các đối tượng với nhau bằng cách giữ đối tượng khỏi việc tham chiếu đến các đối tượng khác một cách tường minh, và cho phép bạn thay đổi sự tương tác của chúng một cách độc lập.

2. Vấn đề thực tế

Chúng ta hãy xem xét bài toán trạm kiểm soát không lưu: giả sử chúng ta có nhiều máy bay muốn đáp xuống sân bay, vậy thì theo thứ tự máy bay nào sẽ đáp xuống trước? Theo lý thuyết, tất cả máy bay có thể liên lạc trực tiếp với nhau để tìm ra một giải pháp chung, thế nhưng, liệu thời gian và các điều kiện khác liệu có cho phép thực việc này? Trạm kiểm soát không lưu ra đời để giải quyết khó khăn của vấn đề trên. Tất cả máy bay muốn thực hiện việc hạ cánh, cất cánh đề phải liên hệ với trạm kiểm soát không lưu, tại trạm này, các chuyên viên sẽ xem xét tình hình hiện tại của sân bay để đưa ra các quyết định. Như vậy, trạm kiểm soát không lưu sẽ quản lý việc tương tác giữa các máy bay với nhau và có thể chủ động thay đổi sự tương tác giữa các máy bay thông qua việc điều hành bay của mình.

Như vậy, làm thế nào các component trong hệ thống có thể giao tiếp lẫn nhau, làm thế nào để kiểm soát các giao tiếp này chặt chẽ và hiệu quả?

3. Giải pháp

Mediator pattern sẽ giúp chúng ta giải quyết vấn đề trên.

Thực chất, mediator chính là một nhân tố trung gian trung chuyển các mệnh lệnh, giao tiếp của các object qua lại một cách thông minh và đáp ứng yêu cầu phức tạp của hệ thống. Theo một cách nào đó, Mediator cũng là nơi tập trung kiểm duyệt các thông tin qua lại giữa các object trong hệ thống.

4. Mô hình




5. Code sample

public interface ControlTower {

    public void send(String message, Airplane airplane);

    public void add(Airplane airplane);
}

public abstract class Airplane {

    private ControlTower _ControlTower;

    public Airplane(ControlTower tower) {
        _ControlTower = tower;
    }

    public void send(String message) {
        _ControlTower.send(message, this);
    }

    public abstract void receive(String message);
}

public class JSAirplane extends Airplane{
    public JSAirplane(ControlTower tower){
        super(tower);
    }
    
    @Override
    public void receive(String message) {
        System.out.println("JetStar Pacific has got message: "+message);
    }
}

public class VNAAirplane extends Airplane{
    
    public VNAAirplane(ControlTower tower){
        super(tower);
    }
    
    @Override
    public void receive(String message) {
        System.out.println("VietNam Airlines has got message: "+message);
    }
    
}

public class TSNControlTower implements ControlTower{
    private List<Airplane> list = new ArrayList<Airplane>();
    
    @Override
    public void send(String message, Airplane airplane) {
       for(Airplane a : list){
           if (a!=airplane){
               a.receive(message);
           }
       } 
    }

    @Override
    public void add(Airplane airplane) {
        list.add(airplane);
    }
    
}

public class MediatorPattern {
    public static void main(String args[]){
        ControlTower tower = new TSNControlTower();
        
        Airplane vna1 = new VNAAirplane(tower);
        Airplane js1 = new JSAirplane(tower);
        Airplane vna2 = new VNAAirplane(tower);
        Airplane js2 = new JSAirplane(tower);
        
        tower.add(vna1);
        tower.add(vna2);
        tower.add(js1);
        tower.add(js2);
        
        js1.send("this is js1 message.");
        vna1.send("VNA1 airplan. We're here");
        vna2.send("we're VNA2. We've ready for flight");
        js2.send("JS2 is still preparing");
        
    }
}


6. Mối liên hệ với các pattern khác

1 nhận xét:

  1. With more and more gamers turning to cell on line casino apps in 2022, you can to|you presumably can} count on plenty of good promotions. If you’re an iPhone® or iPad® user gaming on iOS, we've specific pages that highlight our high suggestions for these gadgets. New cell on line casino apps on your Samsung Galaxy, Fire tablet, or your Nexus or Motorola device are plentiful too, 빅카지노 with our guide to the best Android casinos exhibiting you finest way|the method in which}.

    Trả lờiXóa