ObserverパターンでFizzBuzz

FizzBuzz>それDecoratorパターンで(改)
無意味に難解なFizzBuzz
このあたりからの流れ。

import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicInteger;

interface Counter {
    public void addCounterListener(CounterListener listener);
    public int incrementAndGet();
}

interface CounterListener {
    public void onInclement(Counter sender, int count);
}

class FizzBuzz {
    public static void main(String[] args) {
        Counter counter = new Counter() {
            private final AtomicInteger count = new AtomicInteger();
            private final Set<CounterListener> listeners = new CopyOnWriteArraySet<CounterListener>();
            
            public void addCounterListener(CounterListener listener) {
                listeners.add(listener);
            }
            public int incrementAndGet() {
                int value = count.incrementAndGet();
                for (CounterListener listener: listeners) {
                    listener.onInclement(this, value);
                }
                return value;
            }
        };
        
        counter.addCounterListener(new CounterListener() {
            public void onInclement(Counter sender, int count) {
                if (count % 3 == 0 && count % 5 == 0) {
                    System.out.println("FizzBuzz");
                }
            }
        });
        counter.addCounterListener(new CounterListener() {
            public void onInclement(Counter sender, int count) {
                if (count % 3 == 0 && count % 5 != 0) {
                    System.out.println("Fizz");
                }
            }
        });
        counter.addCounterListener(new CounterListener() {
            public void onInclement(Counter sender, int count) {
                if (count % 3 != 0 && count % 5 == 0) {
                    System.out.println("Buzz");
                }
            }
        });
        counter.addCounterListener(new CounterListener() {
            public void onInclement(Counter sender, int count) {
                if (count % 3 != 0 && count % 5 != 0) {
                    System.out.println(count);
                }
            }
        });
        
        while (counter.incrementAndGet() < 100);
    }
}

あまり面白いものにならなかった(´・ω・`)