公司项目进度紧,老板催着员工加班。
老班有时回来见客户,有时回来拿资料。
老板进办公室时,气氛很紧张,程序员都在埋头写代码。
老板离开办公室,气氛就轻松多了,程序员开始出去散步。
幸好,程序员跟前台妹妹关系不错。
老板进来时,前台妹妹会把消息群发给程序员。
请用Java程序实现办公室的一天。
考察的其实是观察者设计模式。
在JDK中,java.util.Observer代表了观察者,java.util.Observable 代表了被观察者。
本题中,老板是被观察者,前台妹妹既是观察者(观察老板),又是被观察者(要群发消息给程序员)。程序员是观察者。
示例代码如下:
package design_mode; import java.util.Observable; /** * Created by Andrew on 2016/10/31. */ public class Boss extends Observable { public void enterOffice(){ setChanged(); notifyObservers("1"); } public void leaveOffice(){ setChanged(); notifyObservers("0"); } }
package design_mode; import java.util.ArrayList; import java.util.Observable; import java.util.Observer; /** * Created by Andrew on 2016/10/31. */ public class StageGirl extends Observable implements Observer { private static final String WORK = "1"; private static final String REST = "0"; ArrayList<Programmer> programmers; @Override public void update(Observable o, Object arg) { if (arg instanceof String){ setChanged(); if (arg.equals(WORK)) { System.out.println("老板进来了"); notifyObservers(WORK); } if (arg.equals(REST)) { System.out.println("老板离开了"); notifyObservers(REST); } } } }
package design_mode; import java.util.Observable; import java.util.Observer; /** * Created by Andrew on 2016/10/28. */ public class Programmer implements Observer { private String name; public Programmer(String name){ this.name = name; } void readyToWork(){ System.out.println("程序员"+name+"正在埋头写代码"); } void readyToRest(){ System.out.println("程序员"+name+"走出去散散步"); } @Override public void update(Observable o, Object arg) { if (arg instanceof String){ if (arg.equals("1")){ readyToWork(); } if (arg.equals("0")){ readyToRest(); } } } }
package design_mode; /** * Created by Andrew on 2016/10/28. */ public class Office { Boss boss; StageGirl stageGirl; public Office(){ boss = new Boss(); stageGirl = new StageGirl(); boss.addObserver(stageGirl); Programmer p1 = new Programmer("令狐冲"); Programmer p2 = new Programmer("任我行"); Programmer p3 = new Programmer("乔布斯"); stageGirl.addObserver(p1); stageGirl.addObserver(p2); stageGirl.addObserver(p3); stageGirl.hasChanged(); } public void bossEnter(){ boss.enterOffice(); } public void bossLeave(){ boss.leaveOffice(); } public static void main(String[] args) throws InterruptedException { Office office = new Office(); office.bossEnter(); office.bossLeave(); } }
运行结果:
老板进来了 程序员乔布斯正在埋头写代码 程序员任我行正在埋头写代码 程序员令狐冲正在埋头写代码 老板离开了 程序员乔布斯走出去散散步 程序员任我行走出去散散步 程序员令狐冲走出去散散步