博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式【java版】
阅读量:7078 次
发布时间:2019-06-28

本文共 2261 字,大约阅读时间需要 7 分钟。

一、定义观察者类

 1)观察者DiningObserver

public class DiningObserver implements Observer {
//只需要实现Observer接口中的update方法 public void update(Observable o, Object arg) {
if(arg.equals("Dining") ){
System.out.println("我是观察者DiningObserver,当前被观察者的状态为:Dining!"); }else{
System.out.println("我是观察者DiningObserver,但状态不匹配"); } } }

 2)观察者SleepingObserver

public class SleepingObserver implements Observer {
//只需要实现Observer接口中的update方法 public void update(Observable o, Object arg) {
if(arg.equals("Sleeping") ){
System.out.println("我是观察者SleepingObserver,当前被观察者的状态为:Sleeping!"); }else{
System.out.println("我是观察者SleepingObserver,但状态不匹配"); } } }

 3)观察者WorkingObserver

public class WorkingObserver implements Observer {
//只需要实现Observer接口中的update方法 public void update(Observable o, Object arg) {
if(arg.equals("Working") ){
System.out.println("我是观察者WorkingObserver,当前被观察者的状态为:Working!"); }else{
System.out.println("我是观察者WorkingObserver,但状态不匹配"); } } }

 

二、定义被观察者类

public class ConcreteObserved extends Observable {
public ConcreteObserved(String state) {
this.state=state; } /* * 使用者基本只需要自己定义一个方法,决定在什么情况下通知所有观察者 * 在自定义的这个方法里,都是直接调用父类的方法 */ public void modifyState(String state){
this.state=state; setChanged();//一定要设置改变位 notifyObservers(this.state);//将参数通知到每个观察者 //通知完之后会自动调用clearChanged方法 } private String state; }

 

三、测试

public class Main {
public static void main(String[] args) {
System.out.println("开始测试观察者模式。。。"); //创建三个观察者 DiningObserver theDiningObserver=new DiningObserver(); SleepingObserver theSleepingObserver=new SleepingObserver(); WorkingObserver theWorkingObserver=new WorkingObserver(); //创建一个被观察者 ConcreteObserved theConcreteObserved=new ConcreteObserved(new String("NoState")); //将三个观察者都添加到被观察者的观察者列表中 theConcreteObserved.addObserver(theDiningObserver); theConcreteObserved.addObserver(theSleepingObserver); theConcreteObserved.addObserver(theWorkingObserver); //被观察者状态发生改变 theConcreteObserved.modifyState(new String("Dining")); } }

 运行结果:

转载于:https://www.cnblogs.com/edisonfeng/archive/2011/12/15/2289096.html

你可能感兴趣的文章
python loss layer: does not need backward computation?
查看>>
Shadow Mapping With PCF
查看>>
Cracking the Coding Interview-ch11 | System Design and Memory Limits
查看>>
ionic ng-repeat 循环传值
查看>>
63. 搜索旋转排序数组 II
查看>>
Java学生管理系统
查看>>
IOS UISearchDisplayController 点击搜索出现黑条问题解决方案
查看>>
如何在应用图标上显示未读消息
查看>>
P2P下载为什么人越多越快呢??
查看>>
iOS--警告收录及科学快速的消除方法
查看>>
Export-XLSX PowerShell generate real Excel XLSX files without Excel and COM
查看>>
Oracle 修改表列属性
查看>>
facl权限(getfacl/setfacl)
查看>>
Homework Exercises 1
查看>>
bzoj 3670 [Noi2014]动物园
查看>>
bzoj 1009 [HNOI2008]GT考试——kmp+矩阵优化dp
查看>>
使用PHP输出中文JSON字符串
查看>>
用Curl测试POST
查看>>
Rails: No such file or directory - getcwd
查看>>
算法18-----判断是否存在符合条件的元素【list】
查看>>