定义:一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知,此种模式通常被用来实现事件处理系统。
适用场景:
1、一个对象状态的更新,需要其他对象同步更新,且其他对象的数量动态可变。
2、对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。
观察者模式类图:
实例:
<pre name="code" class="java">package com.huaxin.observer;
import java.util.ArrayList;
/**
* 被观察者的父类抽象
* <pre name="code" class="java">package com.zhujing.observer;
/**
* 观察者父类抽象
*
* @author SiLious
*
*/
public interface Observer {
public void eventOne(float price);
}
package com.zhujing.observer;
/**
* 观察者父类抽象
*
* @author SiLious
*
*/
public interface Observer {
public void eventOne(float price);
}
package com.zhujing.observer;
/**
* 被观察者的具体类
*
* @author SiLious
*
*/
public class IPhone10 implements Subject {
@Override
public void addObeserver(Observer obs) {
// TODO Auto-generated method stub
obsList.add(obs);
}
@Override
public void removeObserver(Observer obs) {
// TODO Auto-generated method stub
obsList.remove(obs);
}
@Override
public void notifyObserver(float price) {
// TODO Auto-generated method stub
for (Observer obs : obsList) {
obs.eventOne(price);
}
}
}
package com.zhujing.observer;
public class Teacher implements Observer {
private String name;
public Teacher(String name) {
this.name = name;
}
@Override
public void eventOne(float price) {
// TODO Auto-generated method stub
System.out.println(name + "老师你好,苹果手机降价啦,现价:" + price);
}
}
package com.zhujing.observer;
/**
* 观察者的具体类
*
* @author SiLious
*
*/
public class Student implements Observer {
private String name;
public Student(String name) {
this.name = name;
}
@Override
public void eventOne(float price) {
// TODO Auto-generated method stub
System.out.println(name + "同学你好,苹果手机降价啦,现价:" + price);
}
}