观察者模式简单例子

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

写了个简单例子。

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值