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); } }
あまり面白いものにならなかった(´・ω・`)