`

【设计模式】观察者

 
阅读更多

观察者模式:

当某个事件发生时,通知客户端进行响应,如监听器的原理,即可采用此模式来实现。

观察者对主题中某些属性的改变感兴趣,或者对某个事件的发生感兴趣。

这些变化将由主题通知观察者。

观察者需要先注册到主题中,只要注册到主题中,当事件发生时就会得到通知。

当不关心事件是否发生时,可以取消注册。

 

===》主题

package pattern.observer;

public interface Subject {
	void registerObserver(Observer observer);
	void removeObserver(Observer observer);
	void notifyObserver();
}

 

package pattern.observer;

import java.util.ArrayList;
import java.util.List;

public class ConcreteSubject implements Subject {
	
	private String currentStatus;
	
	private boolean illegal;
	
	//维护若干感兴趣的观察者
	private List<Observer> observers;
	
	public ConcreteSubject() {
		observers = new ArrayList<Observer>();
	}
	
	//事件发生
	public void setDatas(String status, boolean illegal) {
		this.currentStatus = status;
		this.illegal = illegal;
		notifyObserver();//事件发生时,通知客户端
	}
	
	//注册
	public void registerObserver(Observer observer) {
		if(observer==null)
			return;
		if(!observers.contains(observer))
			this.observers.add(observer);
	}

	//取消注册
	public void removeObserver(Observer observer) {
		if(observer==null)
			return;
		if(observers.contains(observer))
			this.observers.remove(observer);
	}
	
	//将事件通知到客户端
	public void notifyObserver() {
		for(Observer obs : observers)
			obs.update(this);
	}
	
	//客户端可以采用拉的方式提取需要的数据
	public String getCurrentStatus() {
		return currentStatus;
	}

	public boolean isIllegal() {
		return illegal;
	}

}

 

===》观察者

package pattern.observer;

public interface Observer {
	void update(Subject subject);
}

 

package pattern.observer;

public class ClientA implements Observer {

	private String status;
	
	
	public ClientA(Subject subject) {
		subject.registerObserver(this);
	}

	public void update(Subject subject) {
		if(subject instanceof ConcreteSubject) {
			ConcreteSubject concreteSubject = (ConcreteSubject) subject;
			handleData(concreteSubject);
			showData();
		}
	}

	private void handleData(ConcreteSubject subject) {
		this.status = subject.getCurrentStatus();
	}

	private void showData() {
		System.out.println("status :" + this.status);
	}

}

 

package pattern.observer;

public class ClientB  implements Observer {

	private boolean  illegal;
	
	public ClientB(Subject subject) {
		subject.registerObserver(this);
	}
	
	public void update(Subject subject) {
		if(subject instanceof ConcreteSubject) {
			ConcreteSubject concreteSubject = (ConcreteSubject) subject;
			handleData(concreteSubject);
			showData();
		}
	}

	private void handleData(ConcreteSubject subject) {
		this.illegal = subject.isIllegal();
	}

	private void showData() {
		System.out.println("status :" + this.illegal);
	}
}

 

===》测试

package pattern.observer;

public class ObserverTest {
	public static void main(String[] args) {
		
		ConcreteSubject subject = new ConcreteSubject();
		
		//注册
		Observer a = new ClientA(subject);
		Observer b = new ClientB(subject);
		
		//状态发生改变,观察者将得到通知
		subject.setDatas("good", false);
		
		//解除注册
		subject.removeObserver(b);
		
		subject.setDatas("bad", true);
	}
}

 

分享到:
评论

相关推荐

    设计模式实现——观察者模式

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...

    iOS 设计模式 观察者模式

    观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...

    程序设计模式观察者模式.doc

    程序设计模式观察者模式

    java 设计模式 观察者模式 简单实例 包括测试test类

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...

    设计模式 观察者模式 以Android中TextView文本内容发生变化为背景

    观察者模式是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个背景下,我们以Android中的TextView为例,来深入...

    软件设计模式观察者模式代码

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...

    设计模式 观察者 发布/订阅 Observer

    当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响其他对象的行为 l 订阅对象:当主题对象发生改变,订阅对象需要相应处理...

    观察者模式和设计模式

    观察者模式和设计模式是软件工程中至关重要的概念,它们为构建可维护、可扩展的系统提供了基础。本文将深入探讨这两个设计模式以及与之相关的Java实现。 首先,观察者模式(Observer Pattern)是一种行为设计模式,...

    head first 设计模式 观察者模式 C++ 代码

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...

    设计模式之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,其主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动...

    设计模式-观察者模式(讲解及其实现代码)

    总结来说,观察者模式是一种重要的设计模式,它允许对象在状态改变时自动通知其他对象,从而降低了系统各部分之间的耦合度,提高了代码的灵活性和可扩展性。在实际项目中,正确使用观察者模式可以有效地管理组件间的...

    java 设计模式 观察者 源码

    观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...

    设计模式观察者模式PPT学习教案.pptx

    观察者模式是软件设计模式中的一种对象行为型模式,它定义了一种一对多的依赖关系,使得每当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常被称为发布-订阅模式、模型-视图模式...

    银行系统 Java设计模式观察者模式

    观察者模式(Observer Pattern)是其中一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在银行系统的场景中,这种模式的应用尤其...

    设计模式C++学习之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...

    Java 设计模式-观察者模式(Observer)

    结合微信公众号讲解观察者模式,生动形象,关键是上手快啊

    设计模式专题之(十八)观察者模式---设计模式观察者模式示例代码(python--c++)

    观察者模式是软件设计模式中的一种行为模式,它允许一个对象,称为"主题",维护一个依赖于它的对象列表,这些对象被称为"观察者"。当主题的状态发生改变时,它会通知所有观察者,使它们能够自动更新自己。这种模式在...

    设计模式之观察者模式

    观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动编程、发布/订阅系统...

    设计模式-观察者

    《设计模式——观察者》 在软件工程中,设计模式是一种在特定情境下解决常见问题的经验总结,它们是经过反复验证的最佳实践。观察者模式(Observer Pattern)是行为设计模式的一种,它定义了对象之间的一对多依赖...

    设计模式--观察者模式java例子

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...

Global site tag (gtag.js) - Google Analytics