<>
Subject
+ registerObserver(Observer observer): void
+ removeObserver(Observer observer): void
+ notifyObservers(): void
Baby
- observers: ArrayList
- cry: Cry
+ Baby()
+ registerObserver(Observer observer): void
+ removeObserver(Observer observer): void
+ notifyObservers(): void
+ angryCry(): void
+ hungryCry(): void
+ wetCry(): void
<>
Observer
+ update(Cry cry): void
Mon
-baby: Subject
+Mom(Subject baby)
+update(Cry cry): void
Dad
-baby: Subject
+update(Cry cry): void
public class CribDriver {
public void playBabySim() {
Baby baby = new Baby();
Dad dad = new Dad(baby);
Mom mom = new Mom();
baby.hungryCry();
baby.wetCry();
baby.hungryCry();
baby.hungryCry();
baby.wetCry();
}
public static void main(String[] args) {
CribDriver cd = new
CribDriver();
cd.playBabySim();
}
}
Output
A new baby is born
This baby is hungry
Dad feeds baby
Mom cuddles and feeds baby
This baby is wet
Dad calls mom
Mom changes baby
This baby is angry!
Dad puts in earplugs
This baby is hungry
Mom cuddles and feeds baby
This baby is wet
Mom changes baby
import java.io.*;
import java.util.*;
class Cry{
String cryType;
public Cry(String str){
this.cryType = str;
System.out.println("This baby is " + str);
}
public String getCryType(){
return this.cryType;
}
}
abstract class Subject{
abstract void registerObserver(Observer observer);
abstract void removeObserver(Observer observer);
abstract void notifyObservers(Cry cry);
}
class Baby extends Subject{
private ArrayList<Observer> observers;
private Cry cry;
Baby(){
System.out.println("A new baby is born");
observers = new ArrayList<Observer>();
}
public void registerObserver(Observer observer){
observers.add(observer);
}
public void removeObserver(Observer observer){
this.observers.remove(observer);
}
public void notifyObservers(Cry cry){
for(Observer o : observers){
o.update(cry);
}
}
public void hungryCry(){
cry = new Cry("hungry");
notifyObservers(cry);
}
public void wetCry(){
cry = new Cry("wet");
notifyObservers(cry);
}
public void angryCry(){
cry = new Cry("angry!");
notifyObservers(cry);
}
}
abstract class Observer{
Cry cry;
abstract void update(Cry cry);
}
class Mom extends Observer{
private Subject baby;
public Mom(Subject baby){
this.baby = baby;
}
public void update(Cry cry){
this.cry = cry;
if(cry.getCryType().equals("hungry")){
System.out.println("Mom cuddles and feeds baby");
}else if(cry.getCryType().equals("wet")){
System.out.println("Mom changes baby");
}
}
}
class Dad extends Observer{
private Subject baby;
Boolean isEarplugsOn;
public Dad(Subject baby){
this.baby = baby;
isEarplugsOn = false;
}
public void update(Cry cry){
this.cry = cry;
if(!isEarplugsOn){
if(cry.getCryType().equals("hungry")){
System.out.println("Dad feeds baby");
}else if(cry.getCryType().equals("wet")){
System.out.println("Dad calls mom");
}else if(cry.getCryType().equals("angry!")){
System.out.println("Dad puts in earplugs");
isEarplugsOn = true;
}
}
}
}
public class CribDriver {
public void playBabySim() {
Baby baby = new Baby();
Dad dad = new Dad(baby);
Mom mom = new Mom(baby);
baby.registerObserver(dad);
baby.registerObserver(mom);
baby.hungryCry();
baby.wetCry();
baby.angryCry();
baby.hungryCry();
baby.wetCry();
}
public static void main(String[] args) {
CribDriver cd = new CribDriver();
cd.playBabySim();
}
}
<> Subject + registerObserver(Observer observer): void + removeObserver(Observer observer): void + notifyObservers(): void Baby - observers:...