设计模式之观察者模式

原创 2012年03月21日 12:13:33

/**
 * 
 */
package com.handy.ps;

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

/**
 * @author handy
 * 
 */
abstract class Subject {
	List<Observer> listObserver = new ArrayList<Observer>();

	public void addObserver(Observer o) {
		listObserver.add(o);
	}

	public void removeObserver(Observer o) {
		listObserver.remove(o);
	}

	public void notifyObserver() {
		for (Observer o : listObserver) {
			o.update();
		}
	}
}

/**
 * 
 */
package com.handy.ps;

/**
 * @author handy
 *
 */
abstract class Observer {
 public abstract void update();
}

/**
 * 
 */
package com.handy.ps;

/**
 * @author handy
 *
 */
public class ConcreteSubject extends Subject{
 private String subjectState;

/**
 * @return the subjectState
 */
public String getSubjectState() {
	return subjectState;
}

/**
 * @param subjectState the subjectState to set
 */
public void setSubjectState(String subjectState) {
	this.subjectState = subjectState;
}


}

/**
 * 
 */
package com.handy.ps;

/**
 * @author handy
 * 
 */
public class ConcreteObserver extends Observer {
	private String name;// 观察者的名字
	private String observerState;// 观察者的状态
	private ConcreteSubject concreteSubject;// 被观察的对象

	/**
	 * @param name
	 * @param concreteSubject
	 */
	public ConcreteObserver(String name, ConcreteSubject concreteSubject) {
		super();
		this.name = name;
		this.concreteSubject = concreteSubject;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name
	 *            the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return the observerState
	 */
	public String getObserverState() {
		return observerState;
	}

	/**
	 * @param observerState
	 *            the observerState to set
	 */
	public void setObserverState(String observerState) {
		this.observerState = observerState;
	}

	/**
	 * @return the concreteSubject
	 */
	public ConcreteSubject getConcreteSubject() {
		return concreteSubject;
	}

	/**
	 * @param concreteSubject
	 *            the concreteSubject to set
	 */
	public void setConcreteSubject(ConcreteSubject concreteSubject) {
		this.concreteSubject = concreteSubject;
	}

	@Override
	public void update() {
		// TODO Auto-generated method stub
		observerState = concreteSubject.getSubjectState();
		System.out.println("观察者:" + this.getName() + "的状态为:"
				+ this.getObserverState());

	}

}

package com.handy.ps;

public class TestPS {
	public static void main(String[] args) {
		ConcreteSubject s = new ConcreteSubject();
		s.addObserver(new ConcreteObserver("Observer1", s));
		s.addObserver(new ConcreteObserver("Observer2", s));
		s.addObserver(new ConcreteObserver("Observer3", s));
		s.setSubjectState("Runing");
		s.notifyObserver();
		s.setSubjectState("Blocking");
		s.notifyObserver();
	}
}



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

  • 2017年02月06日 17:18
  • 43KB
  • 下载

7.设计模式之观察者模式

1.  概述      观察者(Observer)模式是对象的行为型模式,又叫做发表-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-收听者(Source/...

设计模式之观察者模式

  • 2016年12月27日 13:41
  • 9KB
  • 下载

java23种设计模式之观察者模式

  • 2011年05月20日 14:10
  • 3KB
  • 下载

设计模式学习(二)-- 观察者模式 Observer Pattern

观察者模式:定义了对象之间的一对多依赖,这样当一个对象状态改变的时候,它的所有依赖者都会收到通知并自动更新。设计原则:为了交互对象之间的松耦合设计而努力。 松耦合的设计让对象之间的依赖降到最低,这样...

23钟设计模式之观察者模式

  • 2013年08月13日 10:44
  • 18KB
  • 下载

java设计模式之观察者模式

  • 2013年11月05日 14:25
  • 7KB
  • 下载

[设计模式]_[中级]_[观察者模式在项目中实际使用例子]

场景: 1. 比如在界面开发中,多个窗口之间需要通讯,比较常见的方法就是各个窗口之间包含对其他窗口的引用,之后在需要时通过其他窗口的引用来调用相应的函数获取相应的值; 但是这个确定还是比较明显的,...

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

  • 2011年07月07日 09:36
  • 11KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之观察者模式
举报原因:
原因补充:

(最多只允许输入30个字)