package com.insightfullogic.java8.examples.chapter8.observer; import java.util.ArrayList; import java.util.List; // BEGIN Moon public class Moon { private final List<LandingObserver> observers = new ArrayList<>(); public void land(String name) { for (LandingObserver observer : observers) { observer.observeLanding(name); } } public void startSpying(LandingObserver observer) { observers.add(observer); } // END Moon public static void main(String[] args) { classBasedExample(); lambdaBasedExample(); } private static void classBasedExample() { // BEGIN classBasedExample Moon moon = new Moon(); moon.startSpying(new Nasa()); moon.startSpying(new Aliens()); moon.land("An asteroid"); moon.land("Apollo 11"); // END classBasedExample } private static void lambdaBasedExample() { // BEGIN lambdaBasedExample Moon moon = new Moon(); moon.startSpying(name -> { if (name.contains("Apollo")) System.out.println("We made it!"); }); moon.startSpying(name -> { if (name.contains("Apollo")) System.out.println("They're distracted, lets invade earth!"); }); moon.land("An asteroid"); moon.land("Apollo 11"); // END lambdaBasedExample } }