设计模式之观察者模式


main
====================================================================================
package com.observer.sym;

public class Client {

/**
* @param args
* 对于观察者模式,有四个角色:
* 被观察者:里面有唤醒所有观察者的方法,并且有抽象的dosomething()方法
* 观察者:一般是一个借口,里面有一个update的抽象方法
* 具体的被观察者:里面有具体的dosomething()方法
* 具体的观察者:里面有具体的update()方法
*
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Subject sub=new ConcreteSubject();
sub.addObser(new ConcreteObserver1());
sub.addObser(new ConcreteObserver2());
sub.dosomething();

}

}

被观察者
=================================================================================
package com.observer.sym;

import java.util.Vector;

abstract class Subject {
private Vector<Observer> obs=new Vector<Observer>();
public void addObser(Observer ob){
obs.add(ob);
}
public void removeObser(Observer ob){
obs.remove(ob);
}
//由于在子类中所有的唤醒都是这样,所以不需要在子类中特定的实现
public void notifyObserver(){
for(Observer ob:obs){
ob.update();
}
}
//注意在抽象类中必须是这样写,不过public可以省略
//由于在各个子类中的具体实现不同,所以可以在此写抽象方法,具体实现在子类中进行
public abstract void dosomething();


}
观察者
===============================================================================
package com.observer.sym;

public interface Observer {
//完整写法为:public static final int a =0;
int a=0;
//完整写法为:public abstract void update ()
public void update();

}
具体的被观察者
===============================================================================
package com.observer.sym;

import java.util.Vector;

public class ConcreteSubject extends Subject {


@Override
public void dosomething() {
// TODO Auto-generated method stub
System.out.println("被观察者事件发生");
this.notifyObserver();
}
}
具体的观察者1
===============================================================================
package com.observer.sym;

public class ConcreteObserver1 implements Observer {

@Override
public void update() {
// TODO Auto-generated method stub
System.out.println("观察者1收到信息,并进行处理");
}

}
具体的观察者2
=================================================================================
package com.observer.sym;

public class ConcreteObserver2 implements Observer {

@Override
public void update() {
// TODO Auto-generated method stub
System.out.println("观察者2收到信息并进行处理");
}

}
/*打印结果:被观察者事件发生
观察者1收到信息,并进行处理
观察者2收到信息并进行处理*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值