Merge pull request #67 from KunwarVikas/stackandqueue
Behavioral Design Pattern - Observer Pattern
This commit is contained in:
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package main.com.kunwar.designpatterns.behavioral.observer;
|
||||||
|
|
||||||
|
public interface IObserver {
|
||||||
|
public void update(Update m);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
13
com/javadevjournal/design/behavioral/observer/Update.java
Normal file
13
com/javadevjournal/design/behavioral/observer/Update.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user