java печать массива интерфейса - PullRequest
0 голосов
/ 06 апреля 2020

Я изучаю шаблон проектирования наблюдателя из одного из видео на YouTube и хочу немного больше понять поведение Arraylist интерфейса, я думаю, я вполне понимаю, как он работает, но когда дело доходит до Arraylist интерфейса, меня смущает, как получить доступ к значению внутри l oop.

субъекта и интерфейса наблюдателя следующим образом;

public interface Subject {

    public void register(Observer o);
    public void unregister(Observer o);
    public void notifyObserver();

}
public interface Observer {

    public void updateViaObserver(double ibmPrice, double aaplPrice, double googPrice);

}
package observer_pattern;

import java.util.ArrayList;
import java.util.Arrays;

public class StockGrabber implements Subject{

    private ArrayList<Observer> observers;
    private double ibmPrice;
    private double aaplPrice;
    private double googPrice; 

    public StockGrabber(){

        // Creates an ArrayList to hold all observers

        observers = new ArrayList<Observer>();

    }

    public void register(Observer newObserver) {

        observers.add(newObserver);


    }

    public void notifyObserver() {

        for(Observer observer : observers){

            observer.updateViaObserver(ibmPrice, aaplPrice, googPrice);

        }


    }

    public void setPrice(double newIBMPrice, double newAAPLPrice, double newGOOGPrice){

        this.ibmPrice = newIBMPrice;
        this.aaplPrice = newAAPLPrice;
        this.googPrice = newGOOGPrice;

        notifyObserver();

    }


}
package observer_pattern;

public class StockObserver implements Observer {

    private double ibmPrice;
    private double aaplPrice;
    private double googPrice;

    private Subject stockGrabber;

    public StockObserver(Subject stockGrabber){

        this.stockGrabber = stockGrabber;

        this.observerID = ++observerIDTracker;

        stockGrabber.register(this);

    }

    // Called to update all observers

    public void updateViaObserver(double ibmPrice, double aaplPrice, double googPrice) {

        this.ibmPrice = ibmPrice;
        this.aaplPrice = aaplPrice;
        this.googPrice = googPrice;

        // this works
        printThePrices();


        // doesn't work
        toString();
    }

    public void printThePrices(){

        System.out.println(observerID + "\nIBM: " + ibmPrice + "\nAAPL: " + 
                aaplPrice + "\nGOOG: " + googPrice + "\n");

    }

    public String toString() {
        return "StockObserver: ibmPrice=" + ibmPrice + " aaplPrice=" + aaplPrice;
    }

}

MAIN

package observer_pattern;

public class GrabStocks{

    public static void main(String[] args){
        StockGrabber stockGrabber = new StockGrabber();

        StockObserver observer1 = new StockObserver(stockGrabber);

        stockGrabber.setIBMPrice(197.00);
        stockGrabber.setAAPLPrice(677.60);
        stockGrabber.setGOOGPrice(676.40);

        observer1.toString();



    }

}

Как получить доступ к значению для моего ArrayList<Observer> observers внутри метода "notifyObserver"? если я сделаю это System.out.println(observers.get(0));, я получу наблюдатель_паттерн. StockObserver@446cdf90

1 Ответ

0 голосов
/ 06 апреля 2020

Как получить доступ к значению для моих наблюдателей ArrayList внутри метода "notifyObserver"?

Вы уже делаете это.

public void notifyObserver() {
    for(Observer observer : observers){
        observer.updateViaObserver(ibmPrice, aaplPrice, googPrice);
    }
}

, если я сделаю это System.out.println (наблюдатели.get (0)); Я получаю Наблюдатель_паттерн. StockObserver@446cdf90

Это потому, что у вашего StockObserver класса нет метода toString, который возвращает читаемое человеком представление объекта. Как то так

public String toString() {
    return "StockObserver: ibmPrice=" + ibmPrice + " aaplPrice=" + aaplPrice;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...