Last active
November 26, 2016 03:28
-
-
Save shoheiyokoyama/a743c750765996e403b9d848c4209a2d to your computer and use it in GitHub Desktop.
デザインパターン「Observer」 ref: http://qiita.com/shoheiyokoyama/items/d4b844ed29f84a80795b
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class DegitObserver implements Observer { | |
public void update(NumberGenerator generator) { | |
System.out.println("DegitObserver:" + generator.getNumber()); | |
try { | |
Thread.sleep(100); | |
} catch (InterruptedException e) { | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:********************************************** |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface Observer { | |
public abstract void update(NumberGenerator generator); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public void update() { | |
// Observer自身が問い合わせる | |
System.out.print("Number:" + this.subject.number); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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