1. // 抽象观察者
    2. public abstract class OwnObserver {
    3. protected String name;
    4. protected Subject sub;
    5. public OwnObserver (String name,Subject sub){
    6. this.name=name;
    7. this.sub=sub;
    8. }
    9. public abstract void Update();
    10. }
    11. // 具体观察者
    12. public class StockObserver extends OwnObserver{
    13. public StockObserver(String name, Subject sub) {
    14. super(name, sub);
    15. }
    16. public void Update() {
    17. System.out.println(this.name+","+this.sub.getSubjectState()+"速度关闭股票行情,继续工作!");
    18. }
    19. }
    20. // 抽象通知者
    21. public abstract class Subject {
    22. public String SubjectState;
    23. abstract void Attach(OwnObserver observer);
    24. abstract void Detach(OwnObserver observer);
    25. abstract void Notify();
    26. public String getSubjectState() {
    27. return SubjectState;
    28. }
    29. public void setSubjectState(String subjectState) {
    30. SubjectState = subjectState;
    31. }
    32. }
    33. // 具体通知者
    34. public class Boss extends Subject{
    35. private ArrayList<OwnObserver> observers = new ArrayList<OwnObserver>();
    36. // 增加
    37. @Override
    38. public void Attach(OwnObserver observer) {
    39. observers.add(observer);
    40. }
    41. // 减少
    42. @Override
    43. public void Detach(OwnObserver observer) {
    44. observers.remove(observer);
    45. }
    46. // 通知
    47. @Override
    48. public void Notify() {
    49. for (OwnObserver ownObserver : observers) {
    50. ownObserver.Update();
    51. }
    52. }
    53. // 状态
    54. public String SubjectState;
    55. }
    56. public class Test {
    57. public static void main(String[] args) {
    58. // 通知者,看到老板通知观察者
    59. Boss wangwu = new Boss();
    60. // 看股票的同事
    61. StockObserver stockObserver1 = new StockObserver("张三", wangwu);
    62. StockObserver stockObserver2 = new StockObserver("李四", wangwu);
    63. wangwu.Attach(stockObserver1);
    64. wangwu.Attach(stockObserver2);
    65. wangwu.setSubjectState("老板王五回来了!");
    66. // 通知
    67. wangwu.Notify();
    68. }