[JAVA] Takashi! Ich habe Reis! Benachrichtigung von Reis nach dem Ovserver-Muster

【Überblick】

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.

[Hierarchie]

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)

[Klassen Diagramm]

observer.png

【Code】

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);
		}
	}
}

【Ausführungsergebnis】

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!

【Referenz】

[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)

[Bonus Ecke]

・ Eine Sammlung von Designmustern auf GitHub   java-design-patterns

Recommended Posts

Takashi! Ich habe Reis! Benachrichtigung von Reis nach dem Ovserver-Muster
Versuchen Sie, || anstelle des ternären Operators zu verwenden
Jetzt habe ich die Grundlagen von RecyclerView zusammengefasst
Der Name ist und das Alter ist Senden Sie eine Benachrichtigung an Slack mit der Java-freien Version von Sentry (mit Lambda)