Skip to content

Instantly share code, notes, and snippets.

@shoheiyokoyama
Last active November 26, 2016 03:28
Show Gist options
  • Save shoheiyokoyama/a743c750765996e403b9d848c4209a2d to your computer and use it in GitHub Desktop.
Save shoheiyokoyama/a743c750765996e403b9d848c4209a2d to your computer and use it in GitHub Desktop.
デザインパターン「Observer」 ref: http://qiita.com/shoheiyokoyama/items/d4b844ed29f84a80795b
public class DegitObserver implements Observer {
public void update(NumberGenerator generator) {
System.out.println("DegitObserver:" + generator.getNumber());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
DegitObserver:20
GraphObserver:********************
DegitObserver:41
GraphObserver:*****************************************
DegitObserver:41
GraphObserver:*****************************************
DegitObserver:35
GraphObserver:***********************************
DegitObserver:16
GraphObserver:****************
DegitObserver:49
GraphObserver:*************************************************
DegitObserver:44
GraphObserver:********************************************
DegitObserver:5
GraphObserver:*****
DegitObserver:0
GraphObserver:
DegitObserver:11
GraphObserver:***********
DegitObserver:16
GraphObserver:****************
DegitObserver:43
GraphObserver:*******************************************
DegitObserver:11
GraphObserver:***********
DegitObserver:47
GraphObserver:***********************************************
DegitObserver:24
GraphObserver:************************
DegitObserver:30
GraphObserver:******************************
DegitObserver:21
GraphObserver:*********************
DegitObserver:15
GraphObserver:***************
DegitObserver:20
GraphObserver:********************
DegitObserver:46
GraphObserver:**********************************************
public class GraphObserver implements Observer {
public void update(NumberGenerator generator) {
System.out.print("GraphObserver:");
int count = generator.getNumber();
for (int i = 0; i < count; i++) {
System.out.print("*");
}
System.out.println("");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
public static void main(String[] args) {
NumberGenerator generator = new RandomNumberGenerator();
Observer degitObserver = new DegitObserver();
Observer graphObserver = new GraphObserver();
generator.addObserver(degitObserver);
generator.addObserver(graphObserver);
generator.execute();
}
import java.util.ArrayList;
import java.util.Iterator;
public abstract class NumberGenerator {
private ArrayList observers = new ArrayList();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void deleteObserver(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
Iterator iterator = observers.iterator();
while (iterator.hasNext()) {
Observer obserber = (Observer)iterator.next();
obserber.update(this);
}
}
public abstract int getNumber();
public abstract void execute();
}
public interface Observer {
public abstract void update(NumberGenerator generator);
}
public void update() {
// Observer自身が問い合わせる
System.out.print("Number:" + this.subject.number);
}
import java.util.Random;
public class RandomNumberGenerator extends NumberGenerator {
private Random random = new Random();
private int number;
public int getNumber() {
return number;
}
public void execute() {
for (int i = 0; i < 20; i++) {
number = random.nextInt(50);
notifyObservers();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment