在教学过程中,面向对象教学结束后,非常经典的一个总结实现就是来自IBM的面试题,具体内容为:
猫叫了,所有老鼠都跑了,主人醒了。要求以观察者模式实现。
观察者
1 public interface Obeserver {
2 public void action();
3 }
主题
1 public interface Subject {
2 public void add(Obeserver ob);
3 }
主人
1 public class Master implements Obeserver {
2
3 public Master(Subject sub) {
4 sub.add(this);
5 }
6
7 @Override
8 public void action() {
9 System.out.println("主人醒了。");
10
11 }
12
13 }
老鼠
1 public class Mouse implements Obeserver {
2
3 private String name;
4
5 public String getName() {
6 return name;
7 }
8
9 public void setName(String name) {
10 this.name = name;
11 }
12
13 public Mouse(Subject sub,String name) {
14 this.setName(name);
15 sub.add(this);
16 }
17
18 @Override
19 public void action() {
20 System.out.println("老鼠" + this.getName() + "跑了。");
21
22 }
23
24 }
猫
1 import java.util.ArrayList;
2 import java.util.List;
3
4
5 public class Cat implements Subject {
6
7 private List<Obeserver> list = new ArrayList<Obeserver>();
8
9 @Override
10 public void add(Obeserver ob) {
11 list.add(ob);
12
13 }
14
15 public void cry() {
16 System.out.println("猫叫了。");
17 for(Obeserver o : list) {
18 o.action();
19 }
20 }
21
22 }
测试
1 public class Test {
2 public static void main(String[] args) {
3 Cat sub = new Cat();
4 Master oa = new Master(sub);
5 Mouse ob = new Mouse(sub, "甲");
6 Mouse oc = new Mouse(sub, "乙");
7 sub.cry();
8 }
9 }
------------------------------------------------------------------
"当智者还在犹豫不决之时,平凡之人将会决定世界的命运!"
http://www.sybdqn.com/
"当智者还在犹豫不决之时,平凡之人将会决定世界的命运!"
http://www.sybdqn.com/