思想
类中持有一个观察者类对象集合,当类对象变化时能够通知并执行观察者对应方法;
 描述
不涉及继承
 其他
类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系
 UML

 示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 
 | interface Source {
 public void name();
 }
 
 class Animal implements Source {
 @Override
 public void name(){
 Test.printMsg("Animal.name");
 };
 }
 class Person implements Source {
 @Override
 public void name(){
 Test.printMsg("Person.name");
 };
 }
 
 interface Project {
 
 public void add(Source source);
 
 public void del(Source source);
 
 public void notifys();
 
 public void operation();
 }
 
 abstract class Subject implements Project {
 private Vector<Source> vector = new Vector<Source>();
 @Override
 public void add(Source observer) {
 vector.add(observer);
 }
 
 @Override
 public void del(Source observer) {
 vector.remove(observer);
 }
 
 @Override
 public void notifys() {
 Enumeration<Source> enumo = vector.elements();
 while(enumo.hasMoreElements()){
 enumo.nextElement().name();
 }
 }
 }
 
 class MySubject extends Subject {
 @Override
 public void operation(){
 Test.printMsg("MySubject.operation");
 notifys();
 }
 }
 
 public class Test {
 public static void printMsg(String msg){
 System.out.println(msg);
 }
 public static void main(String[] args){
 Project proj = new MySubject();
 proj.add(new Animal());
 proj.add(new Person());
 proj.operation();
 }
 }
 
 |