某知名IT企业笔试题:
程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。 要求: (1) 要有联动性,老鼠和主人的行为是被动的; (2) 考虑可扩展性,猫的叫声可能引起其他联动效应。 |
参考解答:【个人观点】
本题可使用观察者模式,参考类图如下所示:
参考代码如下:
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();
}
}
//输出结果如下:
//猫大叫一声!
//大老鼠拼命逃跑!
//小老鼠拼命逃跑!
//小龙女从美梦中惊醒!
【作者:刘伟 http://blog.csdn.net/lovelion】