import java.util.ArrayList;
import java.util.Iterator;

public class Flock implements Quackable {
    ArrayList<Quackable> quackers = new ArrayList<>();

    public void add(Quackable quacker) {
        quackers.add(quacker);
    }

    public void quack() {
        Iterator<Quackable> iterator = quackers.iterator();
        while (iterator.hasNext()) {
            Quackable quacker = iterator.next();
            quacker.quack();
        }
    }

    public void registerObserver(Observer observer) {
        Iterator<Quackable> iterator = quackers.iterator();
        while (iterator.hasNext()) {
            Quackable quacker = iterator.next();
            quacker.registerObserver(observer);
        }
    }

    public void notifyObservers() {
        // Implementation specific to the requirements of your application
        // This could involve notifying observers about the flock's quacking behavior.
    }

    @Override
    public String toString() {
        return "Flock of Quackers";
    }
}

  1. import java.util.ArrayList; import java.util.Iterator;
  2. public class Flock implements Quackable {
  3. ArrayList<Quackable> quackers = new ArrayList<>();
  4. public void add(Quackable quacker) { quackers.add(quacker); }
  5. public void quack() { Iterator<Quackable> iterator = quackers.iterator(); while (iterator.hasNext()) { Quackable quacker = iterator.next(); quacker.quack(); } }
  6. public void registerObserver(Observer observer) { Iterator<Quackable> iterator = quackers.iterator(); while (iterator.hasNext()) { Quackable quacker = iterator.next(); quacker.registerObserver(observer); } }
  7. public void notifyObservers() { /* Implementation specific to the requirements of your application */ }
  8. @Override public String toString() { return "Flock of Quackers"; }
  9. }