`

设计模式----观察者模式(observer)

 
阅读更多
 这里采用两种方式实现观察者模式:第一种方式为完全自己写,第二种方式为实现JDK 

的Observable和Observer接口


第一种方式:

Observer.java代码如下:
package com.designPattern.abserver;

public interface Observer {
	
	public void update(String context);

}



LiSi.java代码如下:
package com.designPattern.abserver;

public class LiSi implements Observer{

	@Override
	public void update(String context) {
      System.out.println("李斯:观察到韩非子的活动了,开始向老板汇报!");
      this.report(context);
      System.out.println("李斯:汇报完毕!");
	}
	
	private void report(String reportContext){
		System.out.println("李斯:报告秦始皇,李斯有活动:"+reportContext);
	}

}



LiuSi.java代码如下:
package com.designPattern.abserver;

public class LiuSi implements Observer{

	@Override
	public void update(String context) {
     System.out.println("刘斯:观察到韩非子活动!");
     this.happy(context);
     System.out.println("刘斯:真被乐死了!");		
	}

	private void happy(String context){
		System.out.println("刘斯:因为"+context+",--所以我很快乐!");
	}
}



WangSi.java代码如下:
package com.designPattern.abserver;

public class WangSi implements Observer{

	@Override
	public void update(String context) {
     System.out.println("王斯:观察到韩非子活动!");
     this.cry(context);
     System.out.println("王斯:真真的哭死了!");
	}
	
	private void cry(String context){
		System.out.println("王斯:因为"+context+"---所以悲伤!");
	}

}



Observable.java代码如下:
package com.designPattern.abserver;

/**
 * 
 * @author yangjianzhou
 * 所有被观察者
 */
public interface Observable {

	public void addObserver(Observer observer);
	
	public void deleteObserver(Observer observer);
	
	public void notifyObservers(String context);
}



HanFeiZi.java代码如下:
package com.designPattern.abserver;

import java.util.ArrayList;

public class HanFeiZi implements Observable{

	private ArrayList<Observer> observerList = new ArrayList<Observer>();

	@Override
	public void addObserver(Observer observer) {
		this.observerList.add(observer);
		
	}

	@Override
	public void deleteObserver(Observer observer) {
		this.observerList.remove(observer);
		
	}

	@Override
	public void notifyObservers(String context) {
		for(Observer observer:observerList){
			observer.update(context);
		}
		
	}
	
	public void haveBreakfast(){
		System.out.println("韩非子:开始吃饭了。。。");
		this.notifyObservers("韩非子正在吃饭");
	}

	public void haveFun(){
		System.out.println("韩非子正在娱乐!");
		this.notifyObservers("韩非子正在娱乐");
	}


}



Client.java代码如下:
package com.designPattern.abserver;

public class Client {
	
	public static void main(String[] args) {
		
		Observer liSi = new LiSi();
		Observer wangSi = new WangSi();
		Observer liuSi = new LiuSi();
		
		HanFeiZi hanFeiZi = new HanFeiZi();
		hanFeiZi.addObserver(liSi);
		hanFeiZi.addObserver(wangSi);
		hanFeiZi.addObserver(liuSi);
		
		hanFeiZi.haveBreakfast();

	}

}



运行结果如下:
韩非子:开始吃饭了。。。
李斯:观察到韩非子的活动了,开始向老板汇报!
李斯:报告秦始皇,李斯有活动:韩非子正在吃饭
李斯:汇报完毕!
王斯:观察到韩非子活动!
王斯:因为韩非子正在吃饭---所以悲伤!
王斯:真真的哭死了!
刘斯:观察到韩非子活动!
刘斯:因为韩非子正在吃饭,--所以我很快乐!
刘斯:真被乐死了!


第二种方式:

LiSi.java 代码如下:
package com.designPattern.abserverAPI;

import java.util.Observable;
import java.util.Observer;

public class LiSi implements Observer{

	@Override
	public void update(Observable observable, Object obj) {
	      System.out.println("李斯:观察到韩非子的活动了,开始向老板汇报!");
	      this.report(obj.toString());
	      System.out.println("李斯:汇报完毕!");		
	}
	
	private void report(String reportContext){
		System.out.println("李斯:报告秦始皇,李斯有活动:"+reportContext);
	}

}



LiuSi.java代码如下:
package com.designPattern.abserverAPI;

import java.util.Observable;
import java.util.Observer;

public class LiuSi implements Observer{

	@Override
	public void update(Observable observable, Object obj) {
     System.out.println("刘斯:观察到韩非子活动!");
     this.happy(obj.toString());
     System.out.println("刘斯:真被乐死了!");		
	}

	private void happy(String context){
		System.out.println("刘斯:因为"+context+",--所以我很快乐!");
	}
}



WangSi.java代码如下:
package com.designPattern.abserverAPI;

import java.util.Observable;
import java.util.Observer;

public class WangSi implements Observer{
	
	@Override
	public void update(Observable observable, Object obj) {
     System.out.println("王斯:观察到韩非子活动!");
     this.cry(obj.toString());
     System.out.println("王斯:真真的哭死了!");
	}
	
	private void cry(String context){
		System.out.println("王斯:因为"+context+"---所以悲伤!");
	}
}



HanFeiZi.java代码如下:
package com.designPattern.abserverAPI;

import java.util.Observable;

/**
 * 
 * @author yangjianzhou
 * 使用JDK自带的Observable类
 */
public class HanFeiZi extends Observable{
	
	public void haveBreakfast(){
		System.out.println("韩非子:开始吃饭了。。。");
		super.setChanged();
		super.notifyObservers("韩非子正在吃饭");
	}

	public void haveFun(){
		System.out.println("韩非子正在娱乐!");
		super.setChanged();
		super.notifyObservers("韩非子正在娱乐");
	}

}



Client.java代码如下:
package com.designPattern.abserverAPI;

import com.designPattern.abserver.HanFeiZi;
import com.designPattern.abserver.LiSi;
import com.designPattern.abserver.LiuSi;
import com.designPattern.abserver.Observer;
import com.designPattern.abserver.WangSi;

public class Client {

	public static void main(String[] args) {
		
		Observer liSi = new LiSi();
		Observer wangSi = new WangSi();
		Observer liuSi = new LiuSi();
		
		HanFeiZi hanFeiZi = new HanFeiZi();
		hanFeiZi.addObserver(liSi);
		hanFeiZi.addObserver(wangSi);
		hanFeiZi.addObserver(liuSi);
		
		hanFeiZi.haveBreakfast();
	}
}



运行结果如下:
韩非子:开始吃饭了。。。
李斯:观察到韩非子的活动了,开始向老板汇报!
李斯:报告秦始皇,李斯有活动:韩非子正在吃饭
李斯:汇报完毕!
王斯:观察到韩非子活动!
王斯:因为韩非子正在吃饭---所以悲伤!
王斯:真真的哭死了!
刘斯:观察到韩非子活动!
刘斯:因为韩非子正在吃饭,--所以我很快乐!
刘斯:真被乐死了!
分享到:
评论

相关推荐

    设计模式-观察者模式-作业-observer.zip

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

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

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

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

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

    C++设计模式--观察者模式 demo

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它在C++中的应用广泛且实用。这种模式的核心思想是“主体”(Subject)与“观察者”(Observer)之间的松耦合关系,允许一个对象(即主体)的状态...

    设计模式-观察者

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

    C++设计模式--基于Qt4开源跨平台开发框架

    行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式(Visitor),关注对象之间的交互和责任分配。 在C++中,设计模式的应用通常涉及到面向对象编程的特性,如继承、封装和多态。Qt4框架则为...

    Observer 观察者模式 示例 源码 ----设计模式

    观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...

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

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

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

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

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

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

    c++设计模式-行为型模式-观察者模式

    c++设计模式-行为型模式-观察者模式;qt工程;c++简单源码; 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式...

    跟我一起学 设计模式-观察者模式

    观察者模式,也称为发布-订阅模式或事件驱动模式,是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在C#、ASP.NET等.NET框架中,...

    设计模式之观察者模式Java实现

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

    设计模式--观察者 c++版本

    在给定的“设计模式--观察者 c++版本”中,我们主要关注的是观察者模式(Observer Pattern)在C++语言中的实现。观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,...

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

    观察者模式,也被称为发布-订阅模式或事件驱动模式,是软件设计模式中的一种行为模式。这个模式的主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...

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

    观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以及时地在对象之间传播状态变化。在Java中,观察者模式常用于构建事件驱动系统,使得多个对象能够监听并响应某个对象的状态改变。 首先,我们要理解...

    Java设计模式-第22章-观察者模式.ppt

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

    Observer设计模式实例

    Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...

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

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

Global site tag (gtag.js) - Google Analytics