观察者模式(Observer)事例

观察者模式(Observer)例子

 

public interface Subject
{
    public void addObserver(Observer observer);
    
    public void removeObserver(Observer observer);
    
    public void notifyObservers();
    
    public void notifyObservers(String blog);
}
public interface Observer
{
    public void update(String blog);
}
import java.util.ArrayList;
import java.util.List;

import com.huawei.observer.inter.Observer;
import com.huawei.observer.inter.Subject;

public class Blogger implements Subject
{
    private List<Observer> observers;
    
    private String blog;
    
    public Blogger()
    {
        observers=new ArrayList<Observer>();
    }
    
    public void addObserver(Observer observer)
    {
        observers.add(observer);
    }
    
    public void removeObserver(Observer observer)
    {
        observers.remove(observer);
    }
    
    public void notifyObservers()
    {
        for(Observer ob:observers)
        {
            ob.update(blog);
        }
    }
    
    public void notifyObservers(String blog)
    {
        this.blog=blog;
        notifyObservers();
    }
    
    public void writeNewBlog(String blog)
    {
        this.blog=blog;
        notifyObservers();
    }
}
import com.huawei.observer.inter.Observer;
/**
 * 邮件订阅者
 * <一句话功能简述>
 * <功能详细描述>
 * 
 * @author  gKF33650
 * @version  [版本号, 2010-10-25]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class EmailSubscriber implements Observer
{
    
    public void update(String blog)
    {
        System.out.println("发送电子邮件:"+blog);
    }
    
}
import com.huawei.observer.inter.Observer;
/**
 * RSS订阅者
 * <一句话功能简述>
 * <功能详细描述>
 * 
 * @author  gKF33650
 * @version  [版本号, 2010-10-25]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class RssSubscriber implements Observer
{
    
    /**
     * RSS订阅者
     * @param blog
     */
    public void update(String email)
    {
        System.out.println("RSS订阅者:"+email);
    }
    
}
import com.huawei.observer.impl.Blogger;
import com.huawei.observer.impl.EmailSubscriber;
import com.huawei.observer.impl.RssSubscriber;
import com.huawei.observer.inter.Observer;
import com.huawei.observer.inter.Subject;

public class Test
{
    public static void main(String[] args)
    {
        Subject sub=new Blogger();
        
        //创建邮件订阅者
        Observer obemail=new EmailSubscriber();
        sub.addObserver(obemail);
        
        //创建RSS订阅者
        Observer obrss=new RssSubscriber();
        sub.addObserver(obrss);
        
        sub.notifyObservers("这是一个观察者!");
    }
}
执行结果:
发送电子邮件:这是一个观察者!
RSS订阅者:这是一个观察者!