设计模式-观察者模式

发布时间 2023-10-31 16:41:27作者: 辞楠
import java.util.ArrayList;
import java.util.List;

public class 观察者模式 {
    public static void main(String[] args) {
        Subject subjectA = new ConcreteSubject("低频");

        Observer observer1 = new ConcreteObserver("张三", subjectA);
        Observer observer2=new ConcreteObserver("李四",subjectA);
        Observer observer3=new ConcreteObserver("王五",subjectA);
        //subjectA.Notify();
        subjectA.setStatus("更新了");

    }
}
interface Subject{
    public void Attach(Observer observer);//添加观察者
    public void Detach(Observer observer);//删除观察者
    public void Notify();//目标发生改变时通知所有的观察者
    public String getStatus();
    public void setStatus(String status);
}
class ConcreteSubject implements Subject{
    private  String name;
    private String status;
    private List<Observer> list;
    public ConcreteSubject(String name)
    {
        status="未更新";
        this.name=name;
        list=new ArrayList<>();
    }
    @Override
    public void setStatus(String status)
    {
        this.status=status;
        System.out.println(name+"的状态发生改变,变化后的状态为:"+status);
        Notify();
    }
    @Override
    public String getStatus()
    {
        return status;
    }
    @Override
    public void Attach(Observer observer)
    {
        list.add(observer);
    }
    @Override
    public void Detach(Observer observer)
    {
        list.remove(observer);
    }
    @Override
    public void Notify()
    {
        for(Observer observer :list)
        {
            observer.update();
        }
    }
}
interface Observer{
    public void update();
}

class ConcreteObserver implements Observer{
    private Subject subject;
    private String name;
    private String status;
    public ConcreteObserver(String name,Subject subject)
    {
        this.name=name;
        this.subject=subject;
        subject.Attach(this);
    }
    @Override
    public void update()
    {
        System.out.println(name+"   收到通知");
        status=subject.getStatus();
        System.out.println("改变后的状态为"+status);
    }
}

运行结果