设计模式——观察者模式

观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

1、抽象主题(Subject)
它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。
2、具体主题(Concrete Subject)
将有关状态存入具体观察者对象;在具体主题内部状态改变时,给所有登记过的观察者发出通知。
3、抽象观察者(Observer)
为所有的具体观察者定义一个接口,在得到主题通知时更新自己。
4、具体观察者(Concrete Observer)
实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态协调。

观察模式.png
import java.util.ArrayList;
import java.util.List;

/**
 * @author apple
 * 
 * 被观察者
 *
 */
public abstract class Subject {
    
    private List<IObserver> observers = new ArrayList<IObserver>();
    
    void attchObserver(IObserver observer) {
        observers.add(observer);
    }
    void detachObserver(IObserver observer) {
        observers.remove(observer);
    }
    void notifyObserver() {
        for (IObserver observer : observers) {
            observer.update();
        }
    }
}
/**
 * 
 * @author apple
 * 
 * 具体被观察者
 *
 */
public class RealSubject extends Subject {

    public void dosomething() {
        super.notifyObserver();
    }

}
/**
 * 
 * @author apple
 * 
 * 观察者
 *
 */
public interface IObserver {
    void update();
}
/**
 * 
 * @author apple
 * 
 * 具体观察者
 *
 */
public class RealObserver implements IObserver {
    
    public void update() {
        // TODO Auto-generated method stub
        System.out.println("接受到信息,更新通知");
    }

}
/**
 * 
 * @author apple
 * 
 * 测试(场景)类
 *
 */

public class Client {

    public static void main(String[] args) {
    
        RealSubject realsubject = new RealSubject();
        
        realsubject.attchObserver(new RealObserver());
        
        realsubject.dosomething();
    }
}

使用场景
当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容