观察者模式定义了一种一对多的依赖关系。
写了个简单例子。
User -- 观察者, TicketCenter -- 目标, TicketNotifyThread ---定义了一个线程用于模拟目标动态变化。
当目标发生变化,观察者都得到更新。
package com.example;
import java.util.ArrayList;
public class SampleJavaTest {
private static int mID = 0;
public static void main(String args[]){
System.out.println("Begin to check ");
User user1 = new User(mID++);
User user2 = new User(mID++);
TicketCenter ticketCenter = new TicketCenter();
ticketCenter.addListener(user1);
ticketCenter.addListener(user2);
//ticketCenter.ticketNotify();
TicketNotifyThread ticketNotifyThread = new TicketNotifyThread(ticketCenter);
ticketNotifyThread.run();
}
}
class User{
private int ID;
public User(int ID){
this.ID = ID;
}
void update(){
System.out.println("update in User" + ID);
}
}
class TicketCenter{
private ArrayList<User> list = new ArrayList<>();
void addListener(User user){
list.add(user);
}
void removeListener(User user){
list.remove(user);
}
void removeAllListener(){
for(User user : list){
list.remove(user);
}
}
void ticketNotify(){
for(User user : list){
user.update();
}
}
}
class TicketNotifyThread implements Runnable{
private TicketCenter ticketCenter;
public TicketNotifyThread(TicketCenter ticketCenter){
this.ticketCenter = ticketCenter;
}
@Override
public void run() {
int notifyTimes = 10;
while(notifyTimes != 0){
ticketCenter.ticketNotify();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
notifyTimes--;
}
ticketCenter.removeAllListener();
System.out.println("End All");
}
}