设计模式之观察者模式

原创 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();
	}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

出处:http://www.ctolib.com/topics-112635.html 观察者模式 定义 定义对象间的一种一对多的依赖关系 ,当一个对象的状态发生改变时 , 所有依赖于它的对象都得到通...

设计模式之观察者模式

设计模式学习之路-观察者模式

设计模式就是解决问题和优化代码的经验总结,站在巨人的肩膀上,才能达到更高的高度。

Java 设计模式之观察者模式

Java 设计模式之观察者模式
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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