• 办公室的一天


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

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

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

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

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

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

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

      

    运行结果:

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

      

  • 相关阅读:
    分页
    hibernate 集合查询
    springmvc <mvc:default-servlet-handler/> & <mvc:annotation-driven>
    An owner of this repository has limited the ability to open a pull request to users that are collaborators on this repository.
    git 本地提交代码到 github 远程库,没有弹框 github login
    小鸡饲料任务,线下扫码付款收饲料地址
    小鸡饲料任务,蚂蚁庄园养鸡线下扫码付款收饲料地址,蚂蚁庄园养鸡线下扫码付款0.01元收饲料地址
    支付宝蚂蚁庄园线下支付链接,支付宝蚂蚁庄园线下支付地址
    kvm虚拟化
    Error Code: 1030. Got error -1 from storage engine
  • 原文地址:https://www.cnblogs.com/andrew-chen/p/6016095.html
Copyright © 2020-2023  润新知