Java 设计模式(5)观察者模式

  1. 上一篇
    1. Java 设计模式(4)策略模式+工厂模式
  2. 特点
  3. 说明
    1. 抽象主题角色类:主要用于注册观察者、删除观察者、通知观察者
      public abstract class Subject {
          /**
           * 用来保存注册的观察者对象
           */
          private    List<Observer> list = new ArrayList<Observer>();
          /**
           * 注册观察者对象
           * @param observer    观察者对象
           */
          public void attach(Observer observer){
      
              list.add(observer);
              System.out.println("Attached an observer");
          }
          /**
           * 删除观察者对象
           * @param observer    观察者对象
           */
          public void detach(Observer observer){
      
              list.remove(observer);
          }
          /**
           * 通知所有注册的观察者对象
           */
          public void nodifyObservers(String newState){
      
              for(Observer observer : list){
                  observer.update(newState);
              }
          }
      }

       

    2. 具体主题角色类:主要用于获取和更新
      public class ConcreteSubject extends Subject{
      
          private String state;
      
          public String getState() {
              return state;
          }
      
          public void change(String newState){
              state = newState;
              System.out.println("主题状态为:" + state);
              //状态发生改变,通知各个观察者
              this.nodifyObservers(state);
          }
      }

       

    3. 抽象观察者角色类

      public interface Observer {
          /**
           * 更新接口
           * @param state    更新的状态
           */
          public void update(String state);
      }

       

    4. 具体观察者角色类
      public class ConcreteObserver implements Observer {
          //观察者的状态
          private String observerState;
      
          @Override
          public void update(String state) {
              /**
               * 更新观察者的状态,使其与目标的状态保持一致
               */
              observerState = state;
              System.out.println("观察者状态为:"+observerState);
          }
      
      }

       

    5. 客户端
      public class Client {
      
          public static void main(String[] args) {
              //创建主题对象
              ConcreteSubject subject = new ConcreteSubject();
              //创建观察者对象
              Observer observer = new ConcreteObserver();
              //将观察者对象登记到主题对象上            
              subject.attach(observer);
              //改变主题对象的状态。然后通知所有的观察者
              subject.change("new state");
          }
      
      }

       

  4. 区别
  5. 下一篇
    1. 下一篇标题
    2. 下一篇链接
posted @ 2025-07-25 14:07  zwjvzwj  阅读(11)  评论(0)    收藏  举报