`
seven27
  • 浏览: 30797 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
  • qgymje: 楼主这个方法如果这样做的结果就是,在sleep期间,页面停止响 ...
    js sleep函數

观察者模式-学习笔记

阅读更多
设计模式中 观察者模式在java中已经实现,只需继承Observable类,然后实现Observer接口即可。
设计模式学习最重要是先明白应用场景,然后再将模式引用进来即可事半功倍!

涉及实际场景:

如某SNS网站都有相册模块,对相册的评论及赞也是很多网站都会加入的功能。
评论者看到一个美女图片,觉得不错,赞一个!
在赞的同时:
1.我们有一个计数功能,来统计每一个相片的赞数量;
2.我们给美女一个message,告诉她有多了一个倾慕者;
此时即可用到观察者模式。

不废话,上源码:



import java.util.Observable;
/**
 * 观察者模式
 * @author  
 *
 */

public class CommendThePicture extends Observable{
	//相片ID
	int picId;
	//讯息
	String message;
	public CommendThePicture(){
	}
	//赞美女图片
	public void  toCommendPic(int picId){
		System.out.println("赞美女的照片:");
		setChanged();
		notifyObservers(picId);
	}
	//传送MESSAGE
	public void  toSendMessage(String message){
		System.out.println("message如下:");
		setChanged();
		notifyObservers(message);
	}
	 
	public int getPicId() {
		return picId;
	}

	public void setPicId(int picId) {
		this.picId = picId;
	}
	
	
}





import java.util.Observable;
import java.util.Observer;
/**
 * 计数
 * @author  
 *
 */
public class CountObserver implements Observer{

	@Override
	public void update(Observable o, Object arg) {
		if(arg instanceof Integer){
			commendNumDao((Integer)arg);
		}
	}
	//调用数据层获取统计数据
	public void commendNumDao(int picId){
		System.out.println("ID="+picId+"的美女照片现在一共有222个人流口水!");
	}

}



import java.util.Observable;
import java.util.Observer;
/**
 * message
 * @author  
 *
 */
public class MessageObserver implements Observer{

	@Override
	public void update(Observable o, Object arg) {
		 if(arg instanceof String){
			 sayToGirl((String)arg);
		 }
		
	}
	
	public void sayToGirl(String message){
		System.out.println("对MM表白:"+message);
	}

}

/**
 * test
 * @author  
 *
 */
public class Test {
	public static void main(String[] argv){
		CommendThePicture c = new CommendThePicture();
		//相片ID
		int picId = 1200;
		String message  = "好漂亮的MM哦!";
		c.addObserver(new CountObserver());
		c.addObserver(new MessageObserver());
		c.toCommendPic(picId);
		c.toSendMessage(message);
	}
}



运行结果如下:
赞美女的照片:
ID=1200的美女照片现在一共有222个人流口水!
message如下:
对MM表白:好漂亮的MM哦!
分享到:
评论

相关推荐

    HeadFirst 设计模式学习笔记2--观察者模式 demo

    总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...

    23个设计模式图解--学习笔记

    在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...

    观察者模式

    在Head First的观察者模式学习笔记中,我们可以深入理解这个模式的原理和应用。首先,观察者模式涉及到两个主要的角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以是任何具有可变状态的对象...

    C#高级编程-学习笔记.pdf

    事件和事件处理程序是实现观察者模式的一种方式,允许松耦合的编程风格。 最后,函数成员(function members)提供了操作类数据的机制。函数成员包括方法、属性、构造函数和终结器、运算符和索引器等。方法类似于...

    学习笔记-深入浅出设计模式

    在《深入浅出设计模式》的学习笔记中,我们可以看到几种关键的设计模式及其应用,包括策略模式、观察者模式、装饰者模式、工厂模式和抽象工厂模式。 1. **策略模式**: - 策略模式的核心在于将算法族封装在独立的...

    设计模式学习笔记

    本学习笔记将重点关注“观察者模式”,这是一种行为设计模式,用于在对象之间定义一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的主要组成部分包括...

    《设计模式》学习笔记

    ### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...

    23种设计模式---大牛笔记[汇编].pdf

    以及行为型中的策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。 设计模式的实施遵循六项核心原则: 1. **开闭原则**:软件...

    《java学习》-java学习笔记.zip

    设计模式是解决常见编程问题的模板,Java开发者应该熟悉常见的设计模式,如单例、工厂、观察者、装饰器、适配器等。这些模式能够提高代码的可读性、可维护性和复用性。 6. **概念区别(概念区别.md)**: 这个...

    新版设计模式手册-笔记

    行为型模式关注对象之间的职责分配,如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility)。策略模式定义了一族算法,将每个算法封装起来,使它们可以互相替换,让算法的变化...

    23种设计模式学习笔记及源码

    6. **观察者模式**:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Java中的`Observer`和`Observable`接口就是这种模式的体现。 7. **装饰器模式**:...

    图解java设计模式_学习笔记_java开发

    8. **观察者模式**:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 9. **职责链模式**:将请求沿着处理者链进行传递,直到某个处理者处理该请求,使得...

    300Java设计模式部分学习笔记

    10. 观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 11. 备忘录模式(Memento Pattern):在不破坏封装的前提下,...

    java线程学习笔记

    Java 线程学习笔记 Java 线程创建有两种方法: 1. 继承 Thread 类,重写 run 方法:通过继承 Thread 类并重写 run 方法来创建线程,这种方法可以使线程具有自己的执行逻辑。 2. 实现 Runnable 接口:通过实现 ...

    C#设计模式学习笔记

    C#设计模式学习笔记是一份详尽的资源,适合任何希望深入了解如何在C#编程中应用设计模式的开发者。这份笔记涵盖了多种设计模式,旨在提升代码的可读性、可维护性和可扩展性,这些都是软件开发中至关重要的要素。 ...

    设计模式之美—学习笔记

    此外,还有一些其他的重要模式,如观察者模式(Observer),它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。职责链模式(Chain of Responsibility)让多...

    Head.First 设计模式学习笔记.pdf

    ### Head.First 设计模式学习笔记知识点总结 #### 一、设计模式概述 设计模式是一种用于解决软件设计中常见问题的标准化方法。通过采用设计模式,开发者可以提高代码的复用性、灵活性和可维护性。《Head First 设计...

    Java入门学习笔记

    设计模式是解决常见编程问题的模板,如单例模式、工厂模式和观察者模式。最后,笔记可能会介绍Java标准库的一些重要部分,如JDBC(Java数据库连接)用于数据库操作,或者Swing和JavaFX用于构建图形用户界面。 每道...

Global site tag (gtag.js) - Google Analytics