排队系统实现

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

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

 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 }

 

posted on 2015-07-30 14:29  luckygxf  阅读(642)  评论(0编辑  收藏  举报

导航