排队系统实现

让每个进入队伍的用户都能看到自己在 中所处的位置和变化。队伍可能随时有人加入和退出,当有人退出影响到用户的位置排名时需要即时反馈到用户

设计模式观察者模式的典型实现场景

 1 import java.util.Iterator;
 2 import java.util.LinkedList;
 3 import java.util.List;
 4 
 5 /**
 6  * 排队系统实现
 7  * 让每个进入队伍的用户都能看到自己在 中所处的位置和变化。队伍可能随时有人加入和退出,当有人退出影响到用户的位置排名时需要即时反馈到用户
 8  * 使用观察者模式实现
 9  * @author GXF
10  *
11  */
12 public class LineupSystem {
13     //排队队列
14     private List<People> queue = new LinkedList<People>();
15     
16     public static void main(String[] args) {
17         LineupSystem lineupSystem = new LineupSystem();
18         People peoples[] = new People[10];
19         for(int i = 1; i < peoples.length; i++){
20             peoples[i] = new People(lineupSystem, "zhangsan" + i);
21             peoples[i].add();
22         }
23 
24     }
25     
26     //入队
27     public void add(People people){
28         queue.add(people);
29         notifyAllPeople();
30     }
31     //出队
32     public void exit(People people){
33         queue.remove(people);
34         notifyAllPeople();
35     }
36     //通知队列里所有人的位置
37     public void notifyAllPeople(){
38         Iterator<People> it_people = queue.iterator();
39         while(it_people.hasNext()){
40             People temp = it_people.next();
41             int index = queue.indexOf(temp);
42             temp.setPosition(index + 1);
43             temp.showPosition();
44         }
45     }
46 
47 }
48 
49 /**
50  * 排队的人
51  * @author GXF
52  *
53  */
54 class People{
55     //排队队列
56     private LineupSystem queue;
57     //在队列中位置
58     private int position;
59     private String name;
60     
61     public People(LineupSystem queue, String name){
62         this.queue = queue;
63         this.name = name;
64     }
65     
66     //排队
67     public void add(){
68         queue.add(this);
69     }
70     //出队
71     public void exit(){
72         queue.equals(this);
73     }
74     //设置在队列中位置
75     public void setPosition(int position){
76         this.position = position;
77     }
78     //显示在队列中的位置
79     public void showPosition(){
80         System.out.println(name + " 在队列中的位置为: " + position);
81     }
82 }

 

转载于:https://www.cnblogs.com/luckygxf/p/4689255.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值