观察者模式简单例子

来源:互联网 发布:好的码字软件 编辑:程序博客网 时间:2024/05/22 10:44

观察者模式定义了一种一对多的依赖关系。

写了个简单例子。

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



 

 

0 0
原创粉丝点击