diff --git a/com/javadevjournal/design/behavioral/observer/FirstSubscriber.java b/com/javadevjournal/design/behavioral/observer/FirstSubscriber.java new file mode 100644 index 0000000..7862c2a --- /dev/null +++ b/com/javadevjournal/design/behavioral/observer/FirstSubscriber.java @@ -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()); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/observer/IObserver.java b/com/javadevjournal/design/behavioral/observer/IObserver.java new file mode 100644 index 0000000..2ff2a2f --- /dev/null +++ b/com/javadevjournal/design/behavioral/observer/IObserver.java @@ -0,0 +1,5 @@ +package main.com.kunwar.designpatterns.behavioral.observer; + +public interface IObserver { + public void update(Update m); +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/observer/ISubject.java b/com/javadevjournal/design/behavioral/observer/ISubject.java new file mode 100644 index 0000000..d04ec27 --- /dev/null +++ b/com/javadevjournal/design/behavioral/observer/ISubject.java @@ -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); +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/observer/MessagePublisher.java b/com/javadevjournal/design/behavioral/observer/MessagePublisher.java new file mode 100644 index 0000000..5650c56 --- /dev/null +++ b/com/javadevjournal/design/behavioral/observer/MessagePublisher.java @@ -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 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); + } + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/observer/ObserverPatternDemo.java b/com/javadevjournal/design/behavioral/observer/ObserverPatternDemo.java new file mode 100644 index 0000000..bb2a2a5 --- /dev/null +++ b/com/javadevjournal/design/behavioral/observer/ObserverPatternDemo.java @@ -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 + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/observer/SecondSubscriber.java b/com/javadevjournal/design/behavioral/observer/SecondSubscriber.java new file mode 100644 index 0000000..2ec0202 --- /dev/null +++ b/com/javadevjournal/design/behavioral/observer/SecondSubscriber.java @@ -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()); + } +} diff --git a/com/javadevjournal/design/behavioral/observer/ThirdSubscriber.java b/com/javadevjournal/design/behavioral/observer/ThirdSubscriber.java new file mode 100644 index 0000000..540b311 --- /dev/null +++ b/com/javadevjournal/design/behavioral/observer/ThirdSubscriber.java @@ -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()); + } +} \ No newline at end of file diff --git a/com/javadevjournal/design/behavioral/observer/Update.java b/com/javadevjournal/design/behavioral/observer/Update.java new file mode 100644 index 0000000..681b48d --- /dev/null +++ b/com/javadevjournal/design/behavioral/observer/Update.java @@ -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; + } +} \ No newline at end of file