a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 125|回复: 1

[其他] JAVA技巧:java设计模式之观察者模式(Observer

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
//Subject.java   package com.youngmaster.model.Observer;1 }' s* U/ M, E% S+ x
  /**! b3 H; b* u" z5 H# h& {
  */
9 I( h* B3 N# B( T+ Q3 Q+ C  /**
: e5 U4 T# |& W, l9 i  * 察者模式属于行为型模式,其意图是界说对象间的一种一对多的依靠关系,0 i0 j6 A4 ~& X+ u5 @! U. c) x
  * 当一个对象的状况发生改变时,所有依靠于它的对象都获得通知并被自动更新。/ e- G! V7 u8 ]% W1 }; Z" M
  * 在建造系统的过程中,将一个系统朋分成一系列彼此协作的类有一个常见的副浸染:# \! v5 u) a" q8 X1 b
  * 需要维护相关对象间的一致性。我们不但愿为了维持一致性而使各类慎密耦合," \3 a2 q) H* i4 X& |$ a
  * 因为这样降低了他们的可充用性。章矣闽模式的关头对象是方针(Subject)和不雅察看者(Observer)。# S( T2 Z( T; T: n- M7 |7 J
  * 一个方针可以有肆意数目的依靠它的不雅察看者,一旦方针的状况发生改变,所有的不雅察看者都获得通知,/ X' d" {; }# V& [+ P
  * 作为对这个通知的响应,每个不雅察看者都将发芽方针以使其状况与方针的状况同步。这种交互也称为发布-订阅模式,
1 z; j/ n& I# B8 `. }  * 方针是通知的发布者。他发出通知时并不需要知道谁是他的不雅察看者,可以有肆意数据的不雅察看者订阅并领受通知。
' M) w) w7 @) j* K0 q' H, o. C' [  */  Y) f" X$ \! F9 f& ?1 N' U
  /**1 k: G1 T  K% V
  * subject5 f* A# j4 T% {7 j1 D
  *方针接口+ S  U: N5 K& X8 J  H- F' x
  */
# P2 @9 R# n9 t- }- a  public interface Subject {* M0 W; d2 b  B+ G
  public void addObserver(Observer o);: l- k+ A) ~) `  R1 {; q1 _, o
  public void deletObserver(Observer o);& A5 u( p7 S4 ^, ^. [0 B9 T4 Q
  public void notice();
" E, `* E( T) |& _5 K/ L1 r  }  q- x& C4 H: c/ T+ J
//Observer.java # P6 ^* f* [- r6 {4 [
  package com.youngmaster.model.Observer;4 I" T4 ?& }+ g. H$ s
  /**
+ B7 P& q; P0 ]6 c  */
. A$ z  y( v9 u  /**/ K! q2 d# Y. v6 m: j; \& ?! V
  *不雅察看者接口
+ m: L. @$ O1 a: ^  */8 X- M+ L; l$ F. F$ e0 d6 k& ~% ^
  public interface Observer {
1 f3 w* }! s# }+ [+ Q7 X/ r& I  public void update();3 s+ Z, }/ P% A

7 Y: x8 z  L1 Z+ z- X  }
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:24 | 显示全部楼层

JAVA技巧:java设计模式之观察者模式(Observer

</p>  //Teacher.java
2 z- `1 W- `( |* O" f, t# Y- C  package com.youngmaster.model.Observer;
. N% [, G- r  A! D3 G6 u  import java.util.Vector;  g  {" u7 `) Q0 v' d
  /**
1 C9 M. x  Q$ i/ ]  @& N' A  */9 I2 |) B  y9 q9 R( X5 B( a
  /**  ^+ {- Q* M: v
  *方针接口实现
% b6 Y# ?2 |( m" O! d0 ~  */
) M5 Y7 u* R0 ^- U  public class Teacher implements Subject {9 B4 `0 J: h% t' i4 k! u
  private String phone;
* F4 ~. n9 W  v  p6 _  @SuppressWarnings("unchecked")
" }9 T7 c! R6 e! b& }  private Vector students;, h2 y+ z: Y6 ?, i+ y4 S6 e6 H
  @SuppressWarnings("unchecked")
8 i7 o8 n! A9 }" z% O/ h& t  public Teacher() {3 K, L8 l9 h5 q# Y/ O$ ]
  phone = "";. m) ^6 N8 Z; D. p
  students = new Vector();# ?1 }- a& l5 c
  }" y; O" ?+ J0 @( T: ]' X3 u% F0 h
  @SuppressWarnings("unchecked")$ o& P3 @, D% U; s: b& }
  @Override2 {9 s0 Z( [8 ^* D' W( f& U
  public void addObserver(Observer o) {) Z4 d! J) x0 F; _: i. D4 H
  students.add(o);. J  j/ A7 }5 P; b# a) [3 m# c
  }
5 r* _% d+ x$ l; V) q1 I2 [  @Override/ s2 H8 d( D5 j4 s6 n
  public void deletObserver(Observer o) {& N3 X0 q. x+ a9 n
  students.remove(o);4 S: A' x3 i% m/ i5 V  b  A
  }
) a# E- P0 r) G0 }4 M: R' e, u  @Override
) ]# z) a# A* e! F1 S; ^' }  public void notice() {
% h- e7 A. \- ~/ P9 k0 J  n  for (int i = 0; i < students.size(); i++) { ((Observer) students.get(i)).update();
" V% {$ a/ O2 r5 g7 r0 z  }( a1 W' W: `3 m. _2 S, K+ o
  }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 13:10 , Processed in 0.193976 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表