码迷,mamicode.com
首页 > 编程语言 > 详细

Java设计模式之观察者模式

时间:2015-05-12 15:52:06      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:java   设计模式   

Android开发如果不懂设计模式,那么再深度研究就会困难重重,笔者深有体会,研究设计模式势在必行:

第一篇:观察者模式:

观察者模式定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并会自动更新。

观察者模式中主要有目标对象(被观察者)观察者2个对象。

本文使用报社(目标对象)与读者(观察者)来形象替代以上2个对象,实现流程如下:

读者申请报社--->报社保留读者信息--->报社有新的报纸--->一起发送给多个读者--->读者得到新的报纸(数据更新)。

实现代码如下:


目标对象:

package com.hongri.observerpatterns;

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

/**
 * 目标对象
 * @author zhongyao
 */
public class Subject {
	//用来存储已申请报社的读者们
	private List<Observer> readers = new ArrayList<Observer>();
	
	//添加读者
	public void attach(Observer reader){
		readers.add(reader);
	}
	
	//删除读者
	public void detach(Observer reader){
		readers.remove(reader);
	}
	
	//通知所有读者有新的报纸信息(数据更新)
	protected void notifyObervers(){
		for (Observer reader : readers) {
			reader.update(this);
		}
	}
}


目标对象的具体实现类:
package com.hongri.observerpatterns;
/**
 * 具体的目标实现
 * @author zhongyao
 */
public class NewsPaper extends Subject {
	
	private String content;

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
		notifyObervers();
	}
	
}


观察者接口:
package com.hongri.observerpatterns;

/**
 * 观察者
 * @author zhongyao
 */
public interface Observer {
	
	public void update(Subject subject);
}


观察者接口的具体实现类:

package com.hongri.observerpatterns;

/**
 * 观察者实现
 * 
 * @author zhongyao
 */
public class Reader implements Observer {

	private String name;

	public String getName() {
		return name;
	}

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

	@Override
	public void update(Subject subject) {
		System.out.println(name + "收到报纸了,阅读它。内容是==="
				+ ((NewsPaper) subject).getContent());
	}

}

Java客户端测试入口:

package com.hongri.main;

import com.hongri.observerpatterns.NewsPaper;
import com.hongri.observerpatterns.Reader;

public class ObserverPClient {

	/**
	 * (观察者模式)客户端
	 * @param args
	 */
	public static void main(String[] args) {
		
		//报社(被观察者)
		NewsPaper subject = new NewsPaper();
		
		//读者(观察者)
		Reader reader1 = new Reader();
		reader1.setName("张三");
		
		Reader reader2 = new Reader();
		reader2.setName("李四");
		
		Reader reader3 = new Reader();
		reader3.setName("王五");
		
		Reader reader4 = new Reader();
		reader4.setName("赵六");
		
		//添加读者(观察者)到报社(目标对象)
		subject.attach(reader1);
		subject.attach(reader2);
		subject.attach(reader3);
		subject.attach(reader4);
		
		subject.setContent("本期内容是观察者模式...");
	}

}

实现效果:

技术分享


Java设计模式之观察者模式

标签:java   设计模式   

原文地址:http://blog.csdn.net/u012440207/article/details/45668769

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!