java观察者模式的实现

在看博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息。这是如何实现的?是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者,然后循环的把消息发给订阅者,这样就会显得更人性化了。这就是观察者模式,观察者模式有两个对象:博主,订阅者。当读者在订阅时,会把读者信息放到一个队列里面去,方便在博客主布时循环这个对列并发送消息。如此一分析,代码就出来了:

先是订阅者:

public interface Observers {

	public void execute(String s);

}
public class Observer implements Observers{

	@Override
	public void execute(String s) {
		System.out.println(s);
	}

}

再就是发布博客中心了:

public interface Stations {

	public void addObserver(Observers observers);

	public void removeObserver(Observers observers);

	public void notityObserver(String s);

}
public class Station implements Stations{

	private List<Observers> list = new ArrayList<Observers>();

	@Override
	public void addObserver(Observers observers) {
		list.add(observers);
	}

	@Override
	public void removeObserver(Observers observers) {
		list.remove(observers);
	}

	@Override
	public void notityObserver(String s) {
		for (Observers observers : list) {
			observers.execute(s);
		}
	}

}

执行一下:

public class Executor {

	public static void main(String[] args) {
		Stations station = new Station();
		station.addObserver(new Observer());
		station.addObserver(new Observer());
		station.addObserver(new Observer());
		station.addObserver(new Observer());
		station.notityObserver("请使用zson");
	}

}

这就是整个观察者模式的基本实现了。

应用场景及作用:

1.pub/sub(发布/订阅)下使用

2.如果有两个业务模块,如果需要互相通知的话,可以用这种方式进行解耦

时间: 2024-07-30 23:32:33

java观察者模式的实现的相关文章

Java观察者模式 : Observer / Observable

/** Java观察者模式的场景:一个女孩洗澡,被很多男孩偷看. 女孩洞察后,搜索坏男孩,然后继续洗澡. 三个类:Boy,Girl还有主类MainClass. */ /* 男孩 Boy.java */ import java.util.Observable; import java.util.Observer; public class Boy implements Observer{ private String name=""; public Boy(String name){ t

用Spring提高java观察者模式灵活性

在上篇博客 用java观察者模式解耦经典三层架构 的最后,用了一个Client类把Listener的实现类注冊到了LoginEventSource类中,假设须要加入?新的逻辑,加入?新的listener类后,还是须要改动Client类,那么我们能够借助spring提供的容器来帮助我们完好观察者模式. 在spring,在src下建立spring配置文件 <bean id="sessionFactory" class="org.springframework.orm.hib

用java观察者模式解耦经典三层架构

三层架构是一个很经典的架构模式,依据系统的职责不同.将系统分成了表现层,逻辑层和数据訪问层,而且配合数据实体进行传输数据,能够大大的封装性和复用性. 经典的三层架构图: 我们再深入到架构图内部.看看详细的类图,用简单的登陆举例吧: 这里通过LoginUI.调用了LoginLogService和LoginVerificationService两个类.通过类图能够看得出,U层和Service层(本文把BLL层称为了Service层)直接採用了直接调用的方式. 在面向对象的设计中.一直强调要面向接口编

java观察者模式

观察者设定一个观察目标,根据观察目标的变化,观察者采取相应的应对行为---观察者模式 1 //玩家类 2 public class Player { 3 4 private String name; 5 private Team t; 6 7 public Player(String name){ 8 this.name = name; 9 } 10 11 public String getName(){ 12 return name; 13 } 14 15 public void setTea

java观察者模式详解

简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新. 观察者模式的结构 观察者(Observer)模式是对象的行为型模式,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-收听者(Source/Listener)模式或从属者(Dependents)模式. 本模式的类图结构如下: 图1.观察者模式的静态结构

java 观察者模式

/** 抽象的观察者 */ public interface Watcher { // status 为 被被观察着传递过来的状态 public void update(String status); } import java.util.LinkedList; /** 抽象的被观察者 */ public abstract class Watched { /** 用来保存注册的观察者对象 */ protected LinkedList<Watcher> watcherList = new Li

Java观察者模式(Observer模式)

Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Observer(观察者)模式是比较常用的一个模式,尤其在界面设计中应用广泛,而本教程所关注的是Java在电子商务系统中应用,因此想从电子商务实例中分析Observer的应用. 虽然网上商店形式多样,每个站点有自己的特色,但也有其一般的共性,单就"

java观察者模式(转)

简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新. 不多说了,直接给出实现: 例1: /** * 对某个事件只有一个订阅者的例子 * @author yongxing.shao * */ public class OneObserverExample { public static void main(String[] args) { IObserver

Java中的设计模式(七):观察者模式

介绍 观察者模式是行为设计模式之一.当您对对象的状态感兴趣并希望在有任何更改时收到通知时,观察者设计模式非常有用.在观察者模式中,监视另一个对象状态的对象称为Observer,正在被监视的对象称为Subject. 根据GoF,观察者设计模式的意图是; 定义对象之间的一对多依赖关系,以便当一个对象更改状态时,将自动通知和更新其所有依赖项. Subject包含一个观察者列表,用于通知其状态的任何变化,因此它应该提供观察者可以注册和注销自己的方法.Subject还包含一种方法,用于通知所有观察者任何更