公司项目进度紧,老板催着员工加班。
老班有时回来见客户,有时回来拿资料。
老板进办公室时,气氛很紧张,程序员都在埋头写代码。
老板离开办公室,气氛就轻松多了,程序员开始出去散步。
幸好,程序员跟前台妹妹关系不错。
老板进来时,前台妹妹会把消息群发给程序员。
请用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();
}
}
运行结果:
老板进来了 程序员乔布斯正在埋头写代码 程序员任我行正在埋头写代码 程序员令狐冲正在埋头写代码 老板离开了 程序员乔布斯走出去散散步 程序员任我行走出去散散步 程序员令狐冲走出去散散步