[JAVA] Takashi! J'ai du riz! Notification de riz en utilisant le modèle Ovserver

【Aperçu】

Programmation en utilisant le modèle ʻObserver` du modèle de conception. Informez "Takashi" et "Climb" que le petit déjeuner, le déjeuner et le dîner sont prêts. J'utilise Java 8.

[Diagramme hiérarchique]

DesignPattern → Nom du projet    |---src | --- Observer → Nom du package | --- Observer.java (Interface pour représenter l'observateur) | --- ChildObserver.java (Classe qui vous notifie que le riz est prêt) | --- CookGenerator.java (classe abstraite pour faire du riz) | --- BreakfastGenerator.java (Cours de préparation du petit-déjeuner) | --- LunchGenerator.java (Cours de préparation du déjeuner) | --- DinnerGenerator.java (Cours de préparation du dîner) | --- Main.java (Classe qui effectue le traitement principal pour l'exécution du programme)

[Diagramme de classe]

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 + "J'ai pu le faire!");
	}
}

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

	//Je n'utilise pas cette méthode
	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 "petit déjeuner";
	}
}

LunchGenerator.java


package Observer;

public class LunchGenerator extends CookGenerator {
	@Override
	public void cook() {
		notifyObservers();
	}

	@Override
	public String toString() {
		return "le déjeuner";
	}
}

DinnerGenerator.java


package Observer;

public class DinnerGenerator extends CookGenerator {
	@Override
	public void cook() {
		notifyObservers();
	}

	@Override
	public String toString() {
		return "Dîner";
	}
}

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("Montée");

		for (CookGenerator generator : generatorList) {
			generator.addObserver(takashi);
			generator.addObserver(noboru);
		}

		for (CookGenerator generator : generatorList) {
			generator.cook();
			TimeUnit.SECONDS.sleep(2);
		}
	}
}

【Résultat de l'exécution】

Takashi! Le petit déjeuner était prêt!
Montée! Le petit déjeuner était prêt!
Takashi! Le déjeuner était prêt!
Montée! Le déjeuner était prêt!
Takashi! Le dîner était prêt!
Montée! Le dîner était prêt!

【référence】

[Introduction aux modèles de conception appris dans le langage Java augmenté et révisé](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 & mots-clés =% E3% 83% 87% E3% 82% B6% E3% 82 % A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3)

[Coin bonus]

・ Une collection de modèles de conception trouvés sur GitHub   java-design-patterns

Recommended Posts

Takashi! J'ai du riz! Notification de riz en utilisant le modèle Ovserver
Essayez d'utiliser || au lieu de l'opérateur ternaire
Maintenant, j'ai résumé les bases de RecyclerView
Envoyez des notifications à Slack avec la version gratuite de sentry (en utilisant lambda)