标签:
相信很多年轻人买不起房子,看到房子价格变化总会有感慨,这就是一个观察者模式的例子,大家都在关注房价,我们正好作为一个例子,来讲解应用广泛的观察者模式
abstract class Subject{
List<Observer> list = new LinkedList<Observer>();
public void addObserver( Observer observer ){
list.add(observer);
}
public void removeObserver ( Observer observer ){
list.remove( observer);
}
public abstract void notifyObserver( String message );
}
interface Observer {
void update(String message);
}
然后看具体的实现类
interface PriceVary{
String GO_HIGH ="The price of house still go high";
String GO_LOW = "The price of house go low";
}
class HousePrice extends Subject {
@Override
public void notifyObserver( String message ) {
for (Observer observer : list) {
observer.update(message);
}
}
}
class Poor implements Observer{
@Override
public void update(String message) {
System.out.println(message + "But,what about me!");
}
}
class Middle implements Observer{
@Override
public void update(String message) {
if( message.equals( PriceVary.GO_HIGH) ){
System.out.println( message +", I need to save more money!-_-");
}else{
System.out.println( message + " I can buy it! Woh!");
}
}
}
class Rich implements Observer{
@Override
public void update(String message) {
if( message.equals( PriceVary.GO_HIGH) ){
System.out.println( message +", money coming baby!^_^");
}else{
System.out.println( message + " Fuck!");
}
}
}
public class ObserverTest {
public static void main ( String [] args ){
Subject subject = new HousePrice();
subject.addObserver( new Rich());
subject.addObserver( new Poor());
subject.addObserver( new Middle());
subject.notifyObserver( PriceVary.GO_HIGH);
subject.notifyObserver( PriceVary.GO_LOW);
}
}
运行结果如下,这就是一个简单的观察者模式的实现
//一旦被监听者发生改变就会调用该方法
void public update( Observable o , Object arg )
//添加一个监听者
void addObserver ( Observer o )
//获取监听者的数目
int countObservers ()
//删除指定的监听者
void deleteObserver ( Observer o )
//删除所有的监听者
void deleteObservers ()
//判断被监听者是否发生了变化
boolean hasChanged ()
//通知监听者被监听者发生了变化,该操作会调用clearChanged()
void notifyObservers()
void notifyObservers( Object o )
//清零变化的标志位
protected void clearChanged()
//设置变化的标志位,表示发生变化
protected void setChanged()
class HousePrice1 extends Observable {
public void priceUp( ){
setChanged();
super.notifyObservers( PriceVary.GO_HIGH );
}
public void priceDown(){
setChanged();
super.notifyObservers(PriceVary.GO_LOW);
}
}
class Poor1 implements java.util.Observer{
@Override
public void update(Observable o, Object arg) {
String message = arg.toString();
System.out.println(message + "......");
}
}
public class ObserverTest2 {
public static void main ( String [] args ){
HousePrice1 observable = new HousePrice1();
observable.addObserver( new Poor1());
observable.priceUp();
observable.priceDown();
}
}
没有写全部,但是足以授意
Java设计模式(五) Observer(观察者)模式及Tomcat引申
标签:
原文地址:http://blog.csdn.net/qq_24451605/article/details/51244740