您的位置:首页 > 编程语言 > Java开发

观察者模式简单例子

2016-08-15 15:57 423 查看
观察者模式定义了一种一对多的依赖关系。

写了个简单例子。

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");
}
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA 观察者模式