`
shuofenglxy
  • 浏览: 194453 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

菜鸟硕枫设计模式系列之20 观察者模式

阅读更多
观察者模式是设计模式中非常重要的设计模式之一。主要特点是,向要获得信息的对象在观察平台注册,然后当感兴趣的事情发生时,平台通知每一个注册的观察者,观察者根据发生的事情来做出自己的行为。其中要点在于观察者要能方便注册,方便解除注册,观察平台在事情发生时通知他们。消息的发布 订阅传输方式就是采用观察者模式这种机理的。

观察者模式类图:
                                 


具体代码示例:
观察者接口
package oberserverPattern;

public interface Obersever {
 
	void changeState(int tag);
}


具体实现对象类:

package oberserverPattern;

public class Person implements Obersever {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
   
    public void changeState(int tag){
        if(tag==1)
            System.out.println(this.name
                    +" changes his state from playing to hardworking");
        if(tag==2)
            System.out.println(this.name
                    +" changes his state from hardworking to playing");
    }
}


package oberserverPattern;

import java.util.List;

public interface Subject {

	void notify(Obersever obersever,int tag);
}


package oberserverPattern;

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

public class ConcreteSubject implements Subject{

	private  List<Obersever> obersevers= null;

	public void notify(List<Obersever> obersevers,int tag) {
		Iterator<Obersever> it = obersevers.iterator();
		while(it.hasNext()){
			notify(it.next(),tag);
		}
		
	}

	@Override
	public void notify(Obersever obersever,int tag) {
		
		obersever.changeState(tag);
	}

	public  List<Obersever> getList(){
		if (obersevers==null)
			return new ArrayList<Obersever>();
		else 
			return obersevers;
	}
}


package oberserverPattern;

public class Coder extends Person{

}


package oberserverPattern;

public class Boss extends Person{

	private int tag;
	
	public void changeState(int tag){
		if(tag==1)
			System.out.println(this.getName() 
					+"is coming");
		if(tag==2)
			System.out.println(this.getName() 
					+"has gone.");
	}
	
	public void setTag(int tag) {
		this.tag = tag;
	}
	public int getTag() {
		return tag;
	}
}


测试类:
package oberserverPattern;

public class OberseverTest {

	public static void main(String[] args){
		Boss boss = new Boss();
		boss.setName("boss wang");
		boss.setTag(1);
		
		Coder coder1 = new Coder();
		coder1.setName("lxy");
		
		Coder coder2 = new Coder();
		coder2.setName("shuofeng");
		
		ConcreteSubject subject = new ConcreteSubject();
		subject.getList().add(coder1);
		subject.getList().add(coder1);
		boss.changeState(boss.getTag());
		subject.notify(subject.getList(), boss.getTag());
		coder1.changeState(boss.getTag());
		coder2.changeState(boss.getTag());
		
		System.out.println();
		System.out.println("---------------Changer boss's state from 1 to 2-----------");
		System.out.println();
		boss.setTag(2);
		boss.changeState(boss.getTag());
		subject.notify(subject.getList(), boss.getTag());
		coder1.changeState(boss.getTag());
		coder2.changeState(boss.getTag());
	}
}


说明:观察者模式在消息订阅等其他场合应用广泛,是一种重要的设计模式。要点在于有存储订阅者的聚集,有触发通知的时间,有添加订阅,取消订阅的功能方法。优点在于只有当订阅者期望的事情发生时,订阅者才会被通知,从而完成订阅者期望的事件。

  • 大小: 14.4 KB
分享到:
评论

相关推荐

    Java设计模式菜鸟系列教程

    Java设计模式菜鸟系列教程 本教程对Java 23种设计模式进行了总结,涵盖了策略模式、观察者模式、装饰者模式、工厂方法模式、抽象工厂模式、单例模式、命令模式、适配器模式、外观模式、模板方法模式、迭代器模式、...

    设计模式学习经典篇之菜鸟篇

    本资源“设计模式学习经典篇之菜鸟篇”旨在为初学者提供一个全面而通俗易懂的设计模式学习路径。 设计模式的核心在于重用已验证的解决方案,以提高代码的可读性、可维护性和可扩展性。根据GOF(Gamma, Helm, ...

    菜鸟版观察者

    观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计模式中的一个经典概念,主要用于实现对象之间的解耦。在这个模式中,观察者(Observer)是那些对主题(Subject)状态变化感兴趣的对象,而主题...

    23种设计模式知识要点.pdf_设计模式_

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题,提供了一套可重用的解决方案。这些模式都是经验丰富的软件开发者在长期实践中总结出来的,它们可以帮助我们写出更加灵活、可维护和可扩展...

    深入浅出设计模式(.PDF)

    行为型设计模式如观察者模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、状态模式、策略模式、模板方法模式和访问者模式,这些模式关注的是对象之间的交互和行为。 设计模式的核心价值在于它们是...

    C#23种设计模式【完整】(亲测可用)

    6. 观察者模式(Observer Pattern):定义对象之间的一对多依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。 7. 装饰器模式(Decorator Pattern):动态地给对象添加一些额外的职责...

    23种软件设计模式简述

    16. **观察者模式**:定义了对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 17. **状态模式**:允许一个对象在其内部状态改变时改变它的行为,对象看...

    NET 设计模式

    4、观察者模式 5、抽象工厂模式 6、状态模式 7、适配器模式 8、备忘录模式 9、组合模式 10、简单工厂模式 11、迭代器模式 12、单例模式 13、桥接模式 14、命令模式 15、职责链模式 16、中介者模式 17、享元模式 18、...

    Java之美[从菜鸟到高手演变]之设计模式

    总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式...

    菜鸟虚怀项目Java笔试题

    8. **设计模式**:了解常见设计模式如单例模式、工厂模式、装饰者模式、观察者模式,并能在实际编程中应用。 9. **JVM**:内存模型、垃圾回收机制、类加载机制等,理解JVM对程序性能的影响。 10. **数据库操作**:...

    设计模式整理

    - 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知。 - 状态模式(State):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎...

    [网盘]java程序员由菜鸟到笨鸟.pdf

    - 单例模式、工厂模式、观察者模式等经典设计模式的讲解。 - 设计模式在实际项目中的应用实例分析。 5. **Spring框架**: - Spring框架的核心功能:DI(依赖注入)、AOP(面向切面编程)。 - Spring MVC的工作...

    从Java菜鸟到专家的资料

    8. **JAVA设计模式.chm**:设计模式是软件工程中的重要概念,这本书详细介绍了23种经典设计模式,如单例模式、工厂模式、观察者模式等,对提升代码质量和可维护性有极大帮助。 9. **Oracle optimizer.chm**:可能...

    Java程序员由菜鸟到笨鸟学习文档

    9. **设计模式**:介绍一些常见的设计模式,如单例、工厂、观察者等,以及如何在实际项目中应用它们。 进入Java Web开发领域,文档可能会涵盖: 10. **Servlet与JSP**:讲解如何使用Servlet进行后端处理,以及JSP...

    python36patterns:最全python36种设计模式。opp和oop的极致使用方式,一切编码思维逃不出这36计

    不要纠结是23种还是36种了,有细分的,举个例子 观察者模式和发布订阅模式,是有了少许变化,多了解一种总没啥坏处。 为什么是36种,因为是摘自菜鸟教程或者w3cschool网站,这两个网站都是36种,包含了j2ee模式,多...

    DesignPattern:Java 23种设计模式全归纳

    设计模式 设计模式(Design pattern)是一组被反复使用,多数人知晓的,通过分类编目的,代码设计经验的总结。 设计模式分为三种类型,共23种: 创建型模式: ,, ,,。...1.观察者模式 定义了对象之间的一对多的

    java常用数据结构及算法集锦

    观察者模式 模板方法模式 策略模式 命令模式 调停者模式 备忘录模式 解释器模式 迭代器模式 状态模式 责任链模式 访问者模式 结构与算法 基础概念 稀疏数组与二维数组 队列和栈结构 单向链表和双向链表 排序与查找...

    codewarrior菜鸟教程

    ### codewarrior菜鸟教程知识点总结 #### 一、CodeWarrior概述 - **CodeWarrior**是一款由飞思卡尔半导体公司(Freescale Semiconductor)提供的集成开发环境(IDE),主要用于开发基于飞思卡尔微控制器(MCU)的...

Global site tag (gtag.js) - Google Analytics