美文网首页
设计模式笔试题解析(一)

设计模式笔试题解析(一)

作者: 黎明神话 | 来源:发表于2018-07-31 10:35 被阅读0次
    程序设计:

    猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。
    要求:
    (1) 要有联动性,老鼠和主人的行为是被动的;
    (2) 考虑可扩展性,猫的叫声可能引起其他联动效应。

    参考解答

    本题可使用观察者模式,参考类图如下所示:

    image.png
    import java.util.*;
    
    interface Subject    //抽象主题
    {
        public void addObserver(Observer obs);
        public void cry();
    }
    
    interface Observer    //抽象观察者
    {
        public void response();
    }
    
    class Cat implements Subject    //具体主题
    {
        private ArrayList<Observer> list;
    
        public Cat() {
            list = new ArrayList<Observer>();
        }
    
        public void addObserver(Observer obs) {
            list.add(obs);
        }
    
        public void cry() {
            System.out.println("猫大叫一声!");
            for (Object obj : list) {
                ((Observer) obj).response();
            }
        }
    }
    
    class Mouse implements Observer    //具体观察者
    {
    
        private String name;
    
        public Mouse(String name, Subject subject) {
            this.name = name;
            subject.addObserver(this);
        }
    
        public void response() {
            System.out.println(this.name + "拼命逃跑!");
        }
    }
    
    class Master implements Observer     //具体观察者
    {
        private String name;
    
        public Master(String name, Subject subject) {
            this.name = name;
            subject.addObserver(this);
        }
    
        public void response() {
    
            System.out.println(this.name + "从美梦中惊醒!");
        }
    }
    
    class Client    //客户端测试类
    {
        public static void main(String args[])
        {
    
            Subject cat = new Cat();
            Observer mouse1, mouse2, master;
            mouse1 = new Mouse("大老鼠", cat);
            mouse2 = new Mouse("小老鼠", cat);
            master = new Master("小龙女", cat);
            cat.cry();
        }
    }
    

    相关文章

      网友评论

          本文标题:设计模式笔试题解析(一)

          本文链接:https://www.haomeiwen.com/subject/ezucvftx.html