⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.java

📁 设计模式描述设计模式描述设计模式描述设计模式描述
💻 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 + -