Merge pull request #67 from KunwarVikas/stackandqueue

Behavioral Design Pattern - Observer Pattern
This commit is contained in:
javadevjournal
2023-04-27 07:48:34 -07:00
committed by GitHub
8 changed files with 99 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
package main.com.kunwar.designpatterns.behavioral.observer;
public class FirstSubscriber implements IObserver {
@Override
public void update(Update m) {
System.out.println("MessageSubscriberOne :: " + m.getMessageContent());
}
}

View File

@@ -0,0 +1,5 @@
package main.com.kunwar.designpatterns.behavioral.observer;
public interface IObserver {
public void update(Update m);
}

View File

@@ -0,0 +1,7 @@
package main.com.kunwar.designpatterns.behavioral.observer;
public interface ISubject {
public void attach(IObserver o);
public void detach(IObserver o);
public void notifyUpdate(Update m);
}

View File

@@ -0,0 +1,28 @@
package main.com.kunwar.designpatterns.behavioral.observer;
import java.util.ArrayList;
import java.util.List;
public class MessagePublisher implements ISubject {
private List<IObserver> observers = new ArrayList<>();
////in multithreaded environment, please use thread-safe collections
@Override
public void attach(IObserver o) {
observers.add(o);
}
//in multithreaded environment, please use thread-safe collections
@Override
public void detach(IObserver o) {
observers.remove(o);
}
@Override
public void notifyUpdate(Update m) {
for(IObserver o: observers) {
o.update(m);
}
}
}

View File

@@ -0,0 +1,22 @@
package main.com.kunwar.designpatterns.behavioral.observer;
public class ObserverPatternDemo {
public static void main(String[] args) {
FirstSubscriber firstSubscriber = new FirstSubscriber();
SecondSubscriber secondSubscriber = new SecondSubscriber();
ThirdSubscriber thirdSubscriber = new ThirdSubscriber();
MessagePublisher p = new MessagePublisher();
p.attach(firstSubscriber);
p.attach(secondSubscriber);
p.notifyUpdate(new Update("This is the first update")); //s1 and s2 will receive the update
p.detach(firstSubscriber);
p.attach(thirdSubscriber);
p.notifyUpdate(new Update("This is the second update")); //s2 and s3 will receive the update
}
}

View File

@@ -0,0 +1,8 @@
package main.com.kunwar.designpatterns.behavioral.observer;
public class SecondSubscriber implements IObserver {
@Override
public void update(Update m) {
System.out.println("MessageSubscriberTwo :: " + m.getMessageContent());
}
}

View File

@@ -0,0 +1,8 @@
package main.com.kunwar.designpatterns.behavioral.observer;
public class ThirdSubscriber implements IObserver {
@Override
public void update(Update m) {
System.out.println("MessageSubscriberThree :: " + m.getMessageContent());
}
}

View File

@@ -0,0 +1,13 @@
package main.com.kunwar.designpatterns.behavioral.observer;
public class Update {
final String messageContent;
public Update(String m) {
this.messageContent = m;
}
public String getMessageContent() {
return messageContent;
}
}