📄 client.java
字号:
/*
* Created on 2005-5-11
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.test.pattern.behavir.observer;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @author Administrator
*
* 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。 适用性 当一个抽象模型有两个方面,
* 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。 当对一个对象的改变需要同时改变其它对象,
* 而不知道具体有多少对象有待改变。 当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。
*/
class Subject {
private ArrayList list = new ArrayList();
private String strImportantSubjectData = "Initial";
public String getImportantSubjectData() {
return strImportantSubjectData;
}
public void setImportantSubjectData(String value) {
strImportantSubjectData = value;
}
public void Attach(Observer o) {
list.add(o);
o.setObservedSubject(this);
}
public void Detach(Observer o) {
}
public void Notify() {
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Observer o = (Observer) iterator.next();
o.Update();
}
}
}
class ConcreteSubject extends Subject {
public void GetState() {
}
public void SetState() {
}
}
abstract class Observer {
protected Subject s;
public Subject getObservedSubject() {
return s;
}
public void setObservedSubject(Subject value) {
s = value;
}
abstract public void Update();
}
class ConcreteObserver extends Observer {
private String observerName;
public ConcreteObserver(String name) {
observerName = name;
}
public void Update() {
System.out.println("In Observer " + observerName
+ ": data from subject = " + s.getImportantSubjectData());
}
}
/// <summary>
/// Summary description for Client.
/// </summary>
public class Client {
public static void main(String[] args) {
// Set up everything
ConcreteSubject s = new ConcreteSubject();
ConcreteObserver o1 = new ConcreteObserver("first observer");
ConcreteObserver o2 = new ConcreteObserver("second observer");
s.Attach(o1);
s.Attach(o2);
// make changes to subject
s.setImportantSubjectData("This is important subject data");
// Notify all observers
s.Notify();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -