zoukankan      html  css  js  c++  java
  • 设计模式之四观察者模式


    一 概述

    1.什么是观察者模式?

    将一个对象视作被观察者,当它发出某种行为或者发生某种变化时,通知所有依赖它的对象(观察者),这种设计模式叫做观察者设计模式。

    2.观察者设计模式的用途

    用于处理一对多的依赖关系,当一个对象的状态发生改变时,通知所有依赖于它的对象,这些对象收到通知以后采取相应的处理措施。

    二 观察者模式构成

    1. 被观察者接口:包含添加观察者、删除观察者、通知观察者等操作。
    2. 被观察者:实现了被观察者接口,一个具体的被观察者。
    3. 观察者接口:处理被观察者的通知。
    4. 观察者:实现了观察者接口,一个具体的观察者。

    三 实现Demo

    1.被观察者接口

    package com.designmode.observer.demo01;
    
    public interface IObservable {
    
        void addObserver(IObserver observer);
    
        void removeObserver(IObserver observer);
    
        void notifyObservers(String message);
    
    } 

    2.被观察者

    package com.designmode.observer.demo01;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Performer implements IObservable {
    
        private List<IObserver> observers;
    
        public Performer() {
            super();
            observers = new ArrayList<IObserver>();
        }
    
        @Override
        public void addObserver(IObserver observer) {
            // TODO Auto-generated method stub
            observers.add(observer);
        }
    
        @Override
        public void removeObserver(IObserver observer) {
            // TODO Auto-generated method stub
            observers.remove(observer);
        }
    
        @Override
        public void notifyObservers(String message) {
            // TODO Auto-generated method stub
            for (IObserver observer : observers) {
                observer.handleNotify(message);
            }
        }
    
    }

    3.观察者接口

    package com.designmode.observer.demo01;
    
    public interface IObserver {
    
        void handleNotify(String message);
    
    }

    4.观察者一

    package com.designmode.observer.demo01;
    
    public class FirstObserver implements IObserver {
    
        @Override
        public void handleNotify(String message) {
            // TODO Auto-generated method stub
            System.out.println("观察者FirstObserver接收到消息----[" + message + "]----正在处理");
        }
    
    }

    5.观察者二

    package com.designmode.observer.demo01;
    
    public class SecondObserver implements IObserver {
    
        @Override
        public void handleNotify(String message) {
            // TODO Auto-generated method stub
            System.out.println("观察者SecondObserver接收到消息----[" + message + "]----正在处理");
        }
    
    }

    6.测试类

    package com.designmode.observer.demo01;
    
    import org.junit.Test;
    
    public class ObserverTest {
    
        @Test
        public void test01() {
            /**
             * 创建观察者
             */
            IObserver firstObserver = new FirstObserver();
            IObserver secondObserver = new SecondObserver();
    
            IObservable performer = new Performer();// 创建被观察者
    
            /**
             * 添加观察者
             */
            performer.addObserver(firstObserver);
            performer.addObserver(secondObserver);
    
            performer.notifyObservers("被观察者发生变化");
    
        }
    
    }
  • 相关阅读:
    服务器安装宝塔面板
    CentOS7操作SSH/SSHD服务(查看/启动/重启/自启)
    CentOS服务器升级Linux版本
    阿里云云服务器漏洞修复
    Linux服务器安装Docker
    服务器安装Nginx
    服务器端简单Demo
    实现博客内容折叠
    [转]珍惜时间,做好规划——致大学过半的你们
    【LeetCode】9. 回文数
  • 原文地址:https://www.cnblogs.com/tonghun/p/6926241.html
Copyright © 2011-2022 走看看