import java.util.ArrayList;
import java.util.Iterator; /* 抽象观察者类 */ abstract class Observer { public abstract void update();
} /* 抽象被观察主题类 */ abstract class Subject{ private ArrayList obs_list = new ArrayList(); public void attach(Observer obs) {
obs_list.add(obs);
} public void Detach(Observer obs) {
obs_list.remove(obs);
} public void notifyObs() {
for (Iterator iter = obs_list.iterator(); iter.hasNext();) {
Observer obs = (Observer) iter.next();
obs.update();
}
}
} /* 具体观察者类 */
class ConcreteObserver extends Observer { private String obs_name;
private ConcreteSubject cc_subj; public ConcreteObserver(String obs_name, ConcreteSubject cc_subj) {
this.obs_name = obs_name;
this.cc_subj = cc_subj;
} public void update() {
if (cc_subj.getStatus() == 1) {
System.out.println("Boss come back, " + obs_name + " turn off screen!");
} else {
System.out.println("Boss go out, " + obs_name + " turn on screen!");
}
}
} /* 具体观察主题类 */
class ConcreteSubject extends Subject {
private int status; public ConcreteSubject(int status) {
this.status = status;
} public int getStatus() {
return status;
} public void setStatus(int status) { if (status != this.status) {
this.status = status;
super.notifyObs();
}
} } public class Observer_Test{ public static void main(String[] args) { ConcreteSubject cc_sub = new ConcreteSubject(0); ConcreteObserver cc_obs1 = new ConcreteObserver("E1", cc_sub);
ConcreteObserver cc_obs2 = new ConcreteObserver("E2", cc_sub);
ConcreteObserver cc_obs3 = new ConcreteObserver("E3", cc_sub);
cc_sub.attach(cc_obs1);
cc_sub.attach(cc_obs2);
cc_sub.attach(cc_obs3); cc_sub.setStatus(1); //status changed to 1
System.out.println("---------------------------------------");
cc_sub.setStatus(0); //status changed to 0 } }

result:

Boss come back, E1 turn off screen!
Boss come back, E2 turn off screen!
Boss come back, E3 turn off screen!
---------------------------------------
Boss go out, E1 turn on screen!
Boss go out, E2 turn on screen!
Boss go out, E3 turn on screen!

最新文章

  1. 脚手架搭建的vue项目里引入jquery和bootstrap
  2. spring jdbc 查询结果返回对象、对象列表
  3. 1-Spark高级数据分析-第一章 大数据分析
  4. android开发------初识Activity
  5. bootstrap精简教程
  6. MyBatis的foreach语句详解
  7. MongoDB查询语法
  8. ASP.NET 运行机制
  9. leetcode面试准备: Maximal Rectangle
  10. java-下载excel
  11. 《Programming WPF》翻译 第3章 1.什么是控件
  12. QT国际化
  13. 解读Java内部类
  14. C语言函数不定参数实现方式
  15. js的原型
  16. cursor的moveToNext()与moveToFirst()
  17. 小甲鱼Python第十九讲课后习题
  18. python使用sax实现xml解析
  19. [20190321]smem的显示缺陷.txt
  20. 【springBoot】之定制Banner

热门文章

  1. hdu 1171 (背包或者母函数问题)
  2. mysql利用MySQLWorkbench生成数据表之间的关系图
  3. Python数据分析入门与实践
  4. 855. Exam Room
  5. HTML入门:Tag学习
  6. mybatis学习:mybatis注解开发一对一的查询配置
  7. 单元测试神器Mockito
  8. vim 查找及替换
  9. 直接在安装了redis的Linux机器上操作redis数据存储类型--List类型
  10. day18 17.c3p0连接池使用