• 办公室的一天


    公司项目进度紧,老板催着员工加班。

    老班有时回来见客户,有时回来拿资料。

    老板进办公室时,气氛很紧张,程序员都在埋头写代码。

    老板离开办公室,气氛就轻松多了,程序员开始出去散步。

    幸好,程序员跟前台妹妹关系不错。

    老板进来时,前台妹妹会把消息群发给程序员。

    请用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();
        }
    
    
    
    }
    

      

    运行结果:

    老板进来了
    程序员乔布斯正在埋头写代码
    程序员任我行正在埋头写代码
    程序员令狐冲正在埋头写代码
    老板离开了
    程序员乔布斯走出去散散步
    程序员任我行走出去散散步
    程序员令狐冲走出去散散步
    

      

  • 相关阅读:
    Windows上安装配置SSH教程(3)——在Windows系统上安装与配置WinSCP
    Windows上安装配置SSH教程(2)——在Windows XP和Windows 10上安装并配置OpenSSH for Windows
    Windows上安装配置SSH教程(1)——知识点汇总
    Windows上安装配置SSH教程(5)——win10下使用Cygwin+Expect自动登陆ssh
    Win10安装cygwin并添加apt-cyg
    Windows上安装配置SSH教程(4)——WinSCP+OpenSSH 使用公钥自动登陆
    地线干扰与抑制(转)
    AMBA总线协议AHB、APB
    springcloud(六):配置中心git示例
    springcloud(四):熔断器Hystrix
  • 原文地址:https://www.cnblogs.com/andrew-chen/p/6016095.html
Copyright © 2020-2023  润新知