content: package lambdasinaction.chap8;
  
  import java.util.ArrayList;
  import java.util.List;
  
  
  public class ObserverMain {
  
      public static void main(String[] args) {
          Feed f = new Feed();
          f.registerObserver(new NYTimes());
          f.registerObserver(new Guardian());
          f.registerObserver(new LeMonde());
          f.notifyObservers("The queen said her favourite book is Java 8 in Action!");
  
  
          Feed feedLambda = new Feed();
  
          feedLambda.registerObserver((String tweet) -> {
              if(tweet != null && tweet.contains("money")){
                  System.out.println("Breaking news in NY! " + tweet); }
          });
          feedLambda.registerObserver((String tweet) -> {
              if(tweet != null && tweet.contains("queen")){
                  System.out.println("Yet another news in London... " + tweet); }
          });
  
          feedLambda.notifyObservers("Money money money, give me money!");
  
      }
  
  
      interface Observer{
          void inform(String tweet);
      }
  
      interface Subject{
          void registerObserver(Observer o);
          void notifyObservers(String tweet);
      }
  
      static private class NYTimes implements Observer{
          @Override
          public void inform(String tweet) {
              if(tweet != null && tweet.contains("money")){
                  System.out.println("Breaking news in NY!" + tweet);
              }
          }
      }
  
      static private class Guardian implements Observer{
          @Override
          public void inform(String tweet) {
              if(tweet != null && tweet.contains("queen")){
                  System.out.println("Yet another news in London... " + tweet);
              }
          }
      }
  
      static private class LeMonde implements Observer{
          @Override
          public void inform(String tweet) {
              if(tweet != null && tweet.contains("wine")){
                  System.out.println("Today cheese, wine and news! " + tweet);
              }
          }
      }
  
      static private class Feed implements Subject{
          private final List<Observer> observers = new ArrayList<>();
          public void registerObserver(Observer o) {
              this.observers.add(o);
          }
          public void notifyObservers(String tweet) {
              observers.forEach(o -> o.inform(tweet));
          }
      }
  
  }
  