搜尋此網誌

2013年1月8日 星期二

Observer pattern demo (觀察者模式)

import java.util.LinkedList;
import java.util.List;

public class ObserverPatternDemo {
    
    public static void main(String [] args){
        
    Novelist novelist = new Novelist();
    novelist.addReader(new Reader());
    novelist.addReader(new Reader());
    novelist.addReader(new Reader());
    novelist.addReader(new Reader());
    novelist.addReader(new Reader());
    novelist.notifyReaders();
        
    }

}

class Novelist  {
    
    List<InfoReceiver> readerList = new LinkedList();
    
    public void addReader(InfoReceiver reader){
        readerList.add(reader);
    }
    
    public void notifyReaders(){
        
        for(int i = 0 ; i < readerList.size() ; i++){
            Info info = new Info(i);
            readerList.get(i).readInfo(info);
        }
    }
}

class Info{
    
    int id;
    
    Info(int id){
        this.id = id;
    }
    
    public void printInfo(){
        System.out.println("reader " + this.id + " will receiver my newest book");
    }
}

interface InfoReceiver {
    
    public void readInfo(Info info);
}

class Reader implements InfoReceiver{

    @Override
    public void readInfo(Info info) {
        info.printInfo();
    }
    
}