设计模式之观察者模式

        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收到信息并进行处理*/

你可能感兴趣的:(观察者模式)