Categories
Algorithms & Design Design Pattern

Observer Pattern

Subject.java

import java.util.ArrayList;
import java.util.List;

public class Subject {

	private int state;
	public List subscribers ;

	public Subject(){
		subscribers=new ArrayList();
	}
	public int getState() {
		return state;
	}

	public void setState(int state) {
		this.state = state;
	}
	public void attach(Observer observer){
		subscribers.add(observer);
	}
	public void sendNotification(){
		for (Observer observer : subscribers) {
			observer.execute(state);
		}
	}
	
}

Observer.java

public abstract class Observer {

	public abstract void execute(int state);
}

CalculateSquareObserver.java

public class CalculateSquareObserver extends Observer {

	@Override
	public void execute(int state) {
		// TODO Auto-generated method stub
		System.out.println("Square is ::"+(state*state));
	}

}

CalculateEvenOddObserver.java

public class CalculateEvenOddObserver extends Observer {

	@Override
	public void execute(int state) {
		// TODO Auto-generated method stub
			if(state%2==0)
				System.out.println(state + " is even number");
			else 
				System.out.println(state + " is odd number");
	}

}

ObserverPatternDemo.java

import java.util.Scanner;

public class ObserverPatternDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//Create Subject
		Subject subject = new Subject();
		
		//Create observers
		Observer sqrObserver = new CalculateSquareObserver();
		Observer evenOddObserver = new CalculateEvenOddObserver();
		
		//attach observers
		subject.attach(sqrObserver);
		subject.attach(evenOddObserver);
		
		System.out.println("Enter the number :" );
		Scanner sc = new Scanner(System.in);
		subject.setState(sc.nextInt());
		
		subject.sendNotification();
	}

}

Output

Leave a comment

Design a site like this with WordPress.com
Get started