• 观察者模式


    一. 模式的结构图

     二. 模式的实现

    package observer;
    import java.util.*;
    public class ObserverPattern
    {
        public static void main(String[] args)
        {
            Subject subject=new ConcreteSubject();
            Observer obs1=new ConcreteObserver1();
            Observer obs2=new ConcreteObserver2();
            subject.add(obs1);
            subject.add(obs2);
            subject.notifyObserver();
        }
    }
    //抽象目标
    abstract class Subject
    {
        protected List<Observer> observers=new ArrayList<Observer>();   
        //增加观察者方法
        public void add(Observer observer)
        {
            observers.add(observer);
        }    
        //删除观察者方法
        public void remove(Observer observer)
        {
            observers.remove(observer);
        }   
        public abstract void notifyObserver(); //通知观察者方法
    }
    //具体目标
    class ConcreteSubject extends Subject
    {
        public void notifyObserver()
        {
            System.out.println("具体目标发生改变...");
            System.out.println("--------------");       
           
            for(Object obs:observers)
            {
                ((Observer)obs).response();
            }
           
        }          
    }
    //抽象观察者
    interface Observer
    {
        void response(); //反应
    }
    //具体观察者1
    class ConcreteObserver1 implements Observer
    {
        public void response()
        {
            System.out.println("具体观察者1作出反应!");
        }
    }
    //具体观察者1
    class ConcreteObserver2 implements Observer
    {
        public void response()
        {
            System.out.println("具体观察者2作出反应!");
        }
    }

    三. 适用场景

    1. 一对多关系中,一个对象的状态发生改变会影响其他对象。
    2. 有两个方面中,一个方依赖于另一方时,可将其独立封装成类,独立的改变和复用。

  • 相关阅读:
    K8s 使用 nfs-client-provisioner
    MySQL IF CASE 例子
    Nginx 限速
    Python 元组操作
    Python if, while,for,continue,break,三目运算符
    Centos7 安装 pyenv
    MySQL 查看大事务
    Tomcat 修改日志路径及日志分割
    游戏攻略 美少女万华镜5
    自建远程桌面过程 vnc + frp
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13196426.html
Copyright © 2020-2023  润新知