排队系统实现
让每个进入队伍的用户都能看到自己在 中所处的位置和变化。队伍可能随时有人加入和退出,当有人退出影响到用户的位置排名时需要即时反馈到用户
设计模式观察者模式的典型实现场景
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 }
Please call me JiangYouDang!