zoukankan      html  css  js  c++  java
  • 观察者模式

    一. 模式的结构图

     二. 模式的实现

    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. 有两个方面中,一个方依赖于另一方时,可将其独立封装成类,独立的改变和复用。

  • 相关阅读:
    内向者生存手册
    不良言论屏蔽方案探讨——附加一点思考
    提高复用性的编码习惯
    如何管好.net的内存
    谨防信息超载
    .net的反对派们,精神比表面的东西更重要
    为什么我老是半途而废?
    对不起,我也是来给.Net泼冷水的(山寨版)
    把重要的事情先做好
    学英语(外语)的一个误区
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13196426.html
Copyright © 2011-2022 走看看