Programmierung mit dem "Observer" -Muster des Entwurfsmusters. Benachrichtigen Sie "Takashi" und "Climb", dass Frühstück, Mittag- und Abendessen fertig sind. Ich benutze Java 8.
DesignPattern → Projektname |---src | --- Beobachter → Paketname | --- Observer.java (Schnittstelle zur Darstellung des Beobachters) | --- ChildObserver.java (Klasse, die Sie benachrichtigt, dass Reis fertig ist) | --- CookGenerator.java (abstrakte Klasse zur Herstellung von Reis) | --- BreakfastGenerator.java (Frühstücksklasse) | --- LunchGenerator.java (Lunch Making Class) | --- DinnerGenerator.java (Abendessen machen Klasse) | --- Main.java (Klasse, die die Hauptverarbeitung für die Programmausführung ausführt)
Observer.java
package Observer;
public interface Observer {
public abstract void update(CookGenerator generator);
}
ChildObserver.java
package Observer;
public class ChildObserver implements Observer {
private String name;
public ChildObserver(String name) {
this.name = name;
}
public void update(CookGenerator generator) {
System.out.println(name + "! " + generator + "Ich konnte es schaffen!");
}
}
CookGenerator.java
package Observer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public abstract class CookGenerator {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
//Ich benutze diese Methode nicht
public void deleteObserver(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
Iterator it = observers.iterator();
while (it.hasNext()) {
Observer o = (Observer)it.next();
o.update(this);
}
}
public abstract void cook();
}
BreakfastGenerator.java
package Observer;
public class BreakfastGenerator extends CookGenerator {
@Override
public void cook() {
notifyObservers();
}
@Override
public String toString() {
return "Frühstück";
}
}
LunchGenerator.java
package Observer;
public class LunchGenerator extends CookGenerator {
@Override
public void cook() {
notifyObservers();
}
@Override
public String toString() {
return "Mittagessen";
}
}
DinnerGenerator.java
package Observer;
public class DinnerGenerator extends CookGenerator {
@Override
public void cook() {
notifyObservers();
}
@Override
public String toString() {
return "Abendessen";
}
}
Main.java
package Observer;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) throws Exception {
List<CookGenerator> generatorList = new ArrayList<>();
CookGenerator breakfast = new BreakfastGenerator();
CookGenerator lunch = new LunchGenerator();
CookGenerator dinner = new DinnerGenerator();
generatorList.add(breakfast);
generatorList.add(lunch);
generatorList.add(dinner);
Observer takashi = new ChildObserver("Takashi");
Observer noboru = new ChildObserver("Steigen");
for (CookGenerator generator : generatorList) {
generator.addObserver(takashi);
generator.addObserver(noboru);
}
for (CookGenerator generator : generatorList) {
generator.cook();
TimeUnit.SECONDS.sleep(2);
}
}
}
Takashi! Das Frühstück war fertig!
Steigen! Das Frühstück war fertig!
Takashi! Das Mittagessen war fertig!
Steigen! Das Mittagessen war fertig!
Takashi! Das Abendessen war fertig!
Steigen! Das Abendessen war fertig!
[Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache gelernt wurden](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82% E7% 89% 88Java% E8% A8% 80% E8% AA% 9E% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% B6% E3% 82% A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E5% 85% A5% E9% 96% 80-% E7% B5 % 90% E5% 9F% 8E-% E6% B5% A9 / dp / 4797327030 / ref = sr_1_1? Ie = UTF8 & qid = 1515328473 & sr = 8-1 & keywords =% E3% 83% 87% E3% 82% B6% E3% 82 % A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3)
・ Eine Sammlung von Designmustern auf GitHub java-design-patterns
Recommended Posts