Java 观察者模式 简单例子

转载自: http://blog.csdn.net/sunlling/article/details/7866947

如果猫一叫,老鼠就跑,你会用什么模式。这里可以用观察者模式。

 1 public interface ICat

 2 {

 3     public void addObserver(IMouse m);

 4     

 5     public void removeObserver(IMouse m);

 6     

 7     public void notifyObserver();

 8     

 9     public void shout();

10 }
 1 import java.util.ArrayList;

 2 import java.util.List;

 3 

 4 public class HelloKitty implements ICat

 5 {

 6     private List<IMouse> observers = new ArrayList<IMouse>();

 7     

 8     public void addObserver(IMouse m)

 9     {

10         observers.add(m);

11     }

12     

13     public void removeObserver(IMouse m)

14     {

15         observers.remove(m);

16     }

17     

18     public void shout()

19     {

20         System.out.println("Cat is shouting!");

21         notifyObserver();

22     }

23     

24     public void notifyObserver()

25     {

26         for (IMouse m : observers)

27         {

28             m.run();

29         }

30     }

31 }
1 public interface IMouse

2 {

3     public void run();

4 }
1 public class MickeyMouse implements IMouse

2 {

3     public void run()

4     {

5         System.out.println("Kitty is coming, Let's horror run! ");

6     }

7 }
 1 public class Test

 2 {

 3     public static void main(String args[])

 4     {

 5         ICat cat = new HelloKitty();

 6         IMouse mouse = new MickeyMouse();

 7         cat.addObserver(mouse);

 8         cat.shout();

 9     }

10 }

如果要自己实现,代码可以简单的像上面这样写。

运行结果:

----------------------------------

Cat is shouting
Kitty is coming, Let's horror run!

 

但是Java给我们提供了Observer接口/ Observable实现类。

Observer接口里面就一个update方法。因为它是观察者,所以他只要接到通知道后,do biz就可以了,所以很简单。

Observable是个实现类,它做的事比较多,比如添加观察者,移去观察者,所以肯定要一个观察者集合,还有就是本身只否发生的change的成员变量设置,最主要的就是通知观察者这个方法了,具体可以自己看原码了。

下面看用Java给我们提供的方法再实现上面的业务,就更简单了。

 1 import java.util.Observable;

 2 

 3 public class HelloKitty extends Observable

 4 {

 5     public void shout()

 6     {

 7         System.out.println("Cat is shouting");

 8         super.setChanged();

 9         super.notifyObservers();

10     }

11 }
 1 import java.util.Observable;

 2 import java.util.Observer;

 3 

 4 public class MickeyMouse implements Observer

 5 {

 6     public MickeyMouse(Observable o)

 7     {

 8         o.addObserver(this);

 9     }

10     

11     public void update(Observable arg0, Object arg1)

12     {

13         System.out.println("Kitty is coming, Let's horror run!");

14     }

15 }
1 public class Test

2 {

3     public static void main(String[] args)

4     {

5         HelloKitty cat = new HelloKitty();

6         MickeyMouse mouse = new MickeyMouse(cat);

7         cat.shout();

8     }

9 }

运行结果和上面是一样的, 是不是方便很多。

还有像很多电子商务网站,在某个商品上会有,降价通知我的按钮,你觉得那是干什么的呢? 它也可用观察者模式实现哦。自己试试吧。

你可能感兴趣的:(观察者模式)