Design a stock trading system
25927

Can make use of Observer Design Pattern.
Here is a simple implementation of the Publisher/Subscriber model for StockMarket. As and when interviewer pose with some more questions, we can add on to it.

Publisher Interface:


public interface Publisher {
  public void setStockValue(int value);
  public void registerObserver(Observer observer);
  public void unRegisterObserver(Observer observer);
  public void notifyAllObservers();
}
Subscriber(Observer) Interface:


public interface Observer {
   public void update(int newValue);
   public void display();
   public void unSubscribe();
}
StockMarket Class which implements the Publisher interface:


public class StockMarket : Publisher {
  Set<Observer> observers;
  int newValue;

  public StockMarket() {
	observers = new HashSet<Observer>();
	newValue = 0;
  }  
  
  public void setStockValue(int value){
    newValue = value;
  }
  
  public void registerObserver(Observer observer){
    observers.add(observer);
  }

  public void unRegisterObserver(Observer observer){
    if(observer != null && observer instanceof Observer){
	    observers.remove(observer);
	}
  }

  public void notifyAllObservers(){
	Iterator<Observer> observerIterator = observers.iterator();
	while(observerIterator.hasNext()){
		Observer observer = observerIterator.next();
		observer.update(this, null);
	}
  }
}
As a sample i will implement the PayPalStock which implements the Observer Interface. This inturn maintains a reference to the Publisher.


public class PayPalStock : Observer {
   Publisher stockMarket;
   int latestValue;

   public PayPalStock (Publisher subject){
   	latestValue = 0;
    stockMarket = subject;
    stockMarket.registerObserver(this); // Self-Registering to the Publisher
   }

   public void update(int newValue){
    latestValue = newValue;
    display();
   }

   public void display(){
     System.out.println("Latest Stock Price = " + latestValue);
   }

   public void unSubscribe(){
     stockMarket.unRegisterObserver(this);
   }
}
Comments (5)