ShapeObservable.java

// 6. ShapeObservable.java
package com.example.renderer.observer;

/**
 * ShapeObservable是可观察对象,维护观察者列表并在状态变化时通知观察者。
 * 实现了观察者模式中的主题(Subject)角色。
 * 
 * <p>主要功能:
 * <ul>
 *   <li>管理观察者列表</li>
 *   <li>提供添加观察者的方法</li>
 *   <li>在状态变化时通知所有观察者</li>
 * </ul>
 * 
 * <p>典型用法:
 * <pre>
 * ShapeObservable observable = new ShapeObservable();
 * observable.addObserver(new ShapeObserver() {
 *     public void onShapeChanged(Shape shape) {
 *         // 处理图形变化
 *     }
 * });
 * observable.notifyChange(); // 通知所有观察者
 * </pre>
 * 
 * @see ShapeObserver 观察者接口
 * @author liying
 * @since 1.0
 */

import java.util.ArrayList;
import java.util.List;

/**
 * 可观察的图形对象,维护观察者列表并在状态变化时通知观察者
 */
public class ShapeObservable {
    private final List<ShapeObserver> observers = new ArrayList<>();

    /**
     * 添加观察者
     * @param o 要添加的观察者
     */
    public void addObserver(ShapeObserver o) {
        observers.add(o);
    }

    /**
     * 通知所有观察者图形已变化
     */
    public void notifyChange() {
        for (ShapeObserver o : observers) {
            o.onShapeChanged();
        }
    }
}