zoukankan      html  css  js  c++  java
  • 办公室的一天

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

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

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

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

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

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

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

      

    运行结果:

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

      

  • 相关阅读:
    RecyclerView 数据刷新的几种方式 局部刷新 notify MD
    【图片】批量获取几万张图片
    RV BaseRecyclerViewAdapterHelper 总结 MD
    RecyclerView.ItemDecoration 间隔线
    Kotlin【简介】Android开发 配置 扩展
    Kotlin 特性 语法糖 优势 扩展 高阶 MD
    一个十分简洁实用的MD风格的UI主框架
    折叠伸缩工具栏 CollapsingToolbarLayout
    FloatingActionButton FAB 悬浮按钮
    Glide Picasso Fresco UIL 图片框架 缓存 MD
  • 原文地址:https://www.cnblogs.com/andrew-chen/p/6016095.html
Copyright © 2011-2022 走看看