观察者模式的理解

1,在观察这模式中,有观察者和被观察者,其中,有主动权的是被观察者,他才是对一切进行操作的类,而观察者只是一双眼睛,根据被观察者的状态改变而做出相应的反应。

2,代码部分:

(1)创建观察者接口

package test;
//观察者接口
//@Auther dengxt
public interface Watcher {
	public void update(String str);
}

(2)实现观察者接口

package test;
//观察者接口实现
//@Auther dengxt
public class ConcreteWatcher implements Watcher{

	@Override
	public void update(String str) {
		System.out.println(str);
	}

}

 (3)创建被观察者接口,里面有增加,删除,通知方法。

package test;
//被观察者接口
//@Auther dengxt
public interface Watched {
	//增加观察者
	public void addWatcher(Watcher watcher);
	//移除观察者
	public void removeWatcher(Watcher watcher);
	//通知观察者
	public void notifyWatcher(String str);
}

(4) 实现被观察者接口

package test;
//被观察者
//@Auther dengxt
import java.util.ArrayList;
import java.util.List;

public class ConcreteWatched implements Watched{

	List<Watcher> list = new ArrayList<Watcher>();

	@Override
	public void addWatcher(Watcher watcher) {
		list.add(watcher);
	}

	@Override
	public void removeWatcher(Watcher watcher) {
		list.remove(watcher);
	}

	@Override
	public void notifyWatcher(String str) {
		for(Watcher watcher:list){
			watcher.update(str);
		}
	}
	
}

(5)主方法

package test;
//@Auther dengxt
public class testMain {
	public static void main(String[] args){
		Watched girl = new ConcreteWatched();
		
		Watcher boy1 = new ConcreteWatcher();
		Watcher boy2 = new ConcreteWatcher();
		Watcher boy3 = new ConcreteWatcher();
		
		girl.addWatcher(boy1);
		girl.addWatcher(boy2);
		girl.addWatcher(boy3);
		
		girl.notifyWatcher("我很开心!");
	}
}

 (6)运行结果:

总结:

这个世界的现在已经男人多,女孩少,所以,往往一个女孩子有很多的追求者,那些追求者不就是观察者么?(好几个男人看上了一个女人),被观察者自然就是女孩子了,

扫描二维码关注公众号,回复: 5658333 查看本文章

男人要做的事情就是时刻的关注者女孩子的一举一动,他开心,你要看到,他生气你也要知道,这是不是就是上边的更新方法呢?这个世界上的女孩子有很多的权利,比如,喜欢的男孩子就放进集合中,不喜欢的男孩子就让他离开,剔除追求者的集合,如果当女孩子心情不好的时候,通知所有的男孩子,我生气了,这群男孩子,都会知道到她生气了,得到他生气的消息,l开始做出一系列的逻辑操作,比如(买花,请吃饭,约出去玩耍。)

观察者模式 Observer

  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。

  这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。

 

观察者模式的组成

  抽象主题角色(女生接口):把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。

  抽象观察者角色(男生接口):为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。

  具体主题角色(女生接口实现):在具体主题内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个子类实现。

  具体观察者角色(男生接口实现):该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。通常用一个子类实现。如果需要,具体观察者角色可以保存一个指向具体主题角色的引用。

猜你喜欢

转载自blog.csdn.net/qq_38793958/article/details/81774492