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收到信息并进行处理*/
设计模式之观察者模式
最新推荐文章于 2025-06-01 23:45:52 发布