Observer - Наблюдаемая модель вокруг логики получения электронной почты - PullRequest
0 голосов
/ 04 декабря 2018

У меня написана логика получения электронной почты (имя класса: Mail_Receive_Logic).Этот класс загружает все мои непрочитанные письма в массив messages.

У меня также есть классы EmailStatPrinter и EmailStatRecorder.EmailStatPrinter имеет метод writeToConsole, который выводит массив на экран.EmailStatRecorder имеет метод writeToFile, который записывает массив в текстовый файл.

Я хочу реализовать эту логику в форме, наблюдаемой наблюдателем.

public class Mail_Receive_Logic extends Observable{ 
public class EmailStatPrinter implements Observer{
public class EmailStatRecorder implements Observer{

Мой основной метод выглядит следующим образом

public static void main(String[] args) throws ClassNotFoundException {

    // observable
    Mail_Receive_Logic receiveMail = new Mail_Receive_Logic(usernameReceiving, passwordReceiving, fileReceivePath);

    // observer
    EmailStatPrinter writeToConsole = new EmailStatPrinter();
    EmailStatRecorder writeToFile = new EmailStatRecorder();

    receiveMail.addObserver(writeToConsole);
    receiveMail.addObserver(writeToFile);

    Thread receive = new Thread (new Runnable() {
        public void run() { 
            try {
                while (true) {
                    receiveMail.receive();  
                }
            } catch (InterruptedException e) {}
        }
    }); 

    receive.start();

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

@Override
    public void update(Observable o, Object arg) {
        // TODO Auto-generated method stub

    }

Пожалуйста, также объясните мне, почему существуют 2 переменные Observable o и Object arg?

1 Ответ

0 голосов
/ 04 декабря 2018

Вы должны позвонить Observable.notifyObservers() и предоставить arg.Это может быть что угодно.В вашем случае я думаю, что вы хотели бы что-то вроде:

try {
    while (true) {
        receiveMail.receive();
        receiveMail.notifyObservers(messages);
    }
}
catch (InterruptedException e) {
}

Тогда в ваших наблюдателей вы будете получать сообщения как:

@Override
public void update(Observable o, Object arg) {
    // The first arg is the thing you were observing (receiveMail in this case)
    // The second arg is the messages that was passed by the receiveMail instance
}
...