设计模式--观察者模式Observer

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shentong1/article/details/41550503

定义:

        定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

一:Subject

public interface Subject {
	void registerObserver(Observer observer);
	void removerObserver(Observer observer);
	void notifyObersers();
}
public class A implements Subject {
	private ArrayList<Observer> observer;
	public A() {
		observer = new ArrayList<Observer>();
	}
	@Override
	public void registerObserver(Observer observer) {
		// TODO Auto-generated method stub
		this.observer.add(observer);
	}
	@Override
	public void removerObserver(Observer observer) {
		// TODO Auto-generated method stub
		int index = this.observer.indexOf(observer);
		if (index >= 0)
			this.observer.remove(observer);
	}
	@Override
	public void notifyObersers() {
		// TODO Auto-generated method stub
		for (int i = 0; i < observer.size(); i++) {
			observer.get(i).update(temperature, humidity, pressure);
		}
	}
	public void measurementChanged() {
		notifyObersers();
	}
}
多:Observer

public interface Observer{
    public void  update();    
}
public class B implements Observer {
    public void  update(){}
}

类图


实现:

        见链接

使用Java内置的观察者模式:

java/util/Observable  类

    addObserver()

    deleteObserver()

    notifyObservers()

    setChanged()

java/util/Observer  接口

    update()

public class A extends Observable

public class B implements Observer {

    public void  update(){}

}

ps

OO原则

  封装变化 : 在观察者模式中,会改变的是Subject的状态,以及观察者的数目和类型。

  多用组合,少用继承

  针对接口编程,不针对实现编程  :Subject和Observer都使用接口,Observer利用Subject的接口向Subject注册,而Subject利用Observer接口通知Observer。

  **为交互对象之间的松耦合设计而努力

  要点:
    观察者模式定义了对象之间一对多的关系。
    主题用一个共同的接口来更新观察者。
    观察者和可观察者之间用松耦合方式结合(loosecoupling),可观察者不知道观察者的细节,只知道观察者实现了观察者接口。
    Swing大量使用观察者模式,许多GUI框架也是如此。
    JavaBeans 、RMI


展开阅读全文

没有更多推荐了,返回首页