package com;
/**
* @author : majun
* @date :2014年8月27日上午9:31:41
* @version:v1.0+
* @FileName:接口.java
* @ProjectName:javatest
* @PackageName:com
* @EnclosingType:
* @Description:对外提供的接口
*/
public interface 观察者接口 {
void 观察陈功();
}
package com;
import java.util.ArrayList;
import java.util.List;
/**
* @author : majun
* @date :2014年8月27日上午9:33:59
* @version:v1.0+
* @FileName:被观察者.java
* @ProjectName:javatest
* @PackageName:com
* @EnclosingType:
* @Description:TODO
*/
public abstract class 被观察者模版 {
private List<观察者接口> list = new ArrayList<观察者接口>(); // 存放接口
public void 添加观察者(观察者接口 观察者接口) {
list.add(观察者接口);
}
public void 清空观察者() {
list.clear();
}
public void 通知观察者() {
for (观察者接口 观察者接口 : list) {
观察者接口.观察陈功();
}
}
public abstract void 更新状态();
}
package com;
import java.util.ArrayList;
import java.util.List;
/**
* @author : majun
* @date :2014年8月27日上午9:41:05
* @version:v1.0+
* @FileName:测试.java
* @ProjectName:javatest
* @PackageName:com
* @EnclosingType:
* @Description:TODO
*/
public class 测试 {
<span style="white-space:pre"> </span>public static void main(String[] args) {
观察者 g = new 观察者();
被观察者 bg = new 被观察者();
// 首先 添加 观察者
bg.添加观察者(g);
bg.更新状态(); // 实际工作的是通知 实现 观察者接口的 类
// 运行结果
//更新状态---------------->
//偷窥成功-------------------->
}
}
// 观察者 不是人 偷窥行为 ---> 需要实现
class 观察者 implements 观察者接口 {
@Override
public void 观察陈功() {
System.out.println("观察成功-------------------->");
}
}
// 被观察者 需要 继承 被观察者模版 拿到被观察者模版 的所有
class 被观察者 extends 被观察者模版 {
private List<观察者接口> list = new ArrayList<观察者接口>(); // 存放接口
@Override
public void 更新状态() {
System.out.println("更新状态---------------->");
通知观察者();
}
public void 添加观察者(观察者接口 观察者接口) {
list.add(观察者接口);
}
public void 清空观察者() {
list.clear();
}
public void 通知观察者() {
for (观察者接口 观察者接口 : list) {
观察者接口.观察陈功();
}
}
}
</pre><pre>