行为型-观察者模式

~~行为型-观察者模式

一:概述

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

二:代码实现

package com.test.mode;

import java.util.Vector;

/**
 * 观察者模式测试
 */
public class ObserverTest {

    public static void main(String[] args) {
        Subject mySubject = new MySubject();
        mySubject.add(new ObserverOne());
        mySubject.add(new ObserverTwo());
        mySubject.operation();
    }
}

/**
 * 观察者接口  消息会通知到该接口中
 */
interface Observer {
    //收到通知,改变自身状态
    void update();
}

/**
 * 第一个观察者  订阅者
 * 观察者模式中1对多中的多
 */
class ObserverOne implements Observer{
    @Override
    public void update() {
        System.out.println("第一个观察者收到通知,状态更新了");
    }
}

/**
 * 第二个观察者  订阅者
 * 观察者模式中1对多中的多
 */
class ObserverTwo implements Observer {
    @Override
    public void update() {
        System.out.println("第二个观察者收到通知,状态更新了");
    }
}

/**
 * 我们的普通接口,operation也是我们的普通方法,若是需要对该接口实现观察者模式,则需增加删除,添加,通知接口  由另一个抽象类来实现来实现这三个接口
 * operation这个普通业务接口,则是在正常实现类中实现。
 * 抽象主题角色:也叫抽象目标类,抽象主题知道自己的观察者有哪些,提供删除和新增观察者的方法以及通知观察者的抽象方法,由抽象类或接口实现
 * 观察者模式中1对多中的1:就operation方法来说的
 */
interface Subject {
    //添加观察者  订阅
    void add(Observer observer);
    //删除观察者  删除订阅
    void remove(Observer observer);
    //通知所有观察者
    void notifyObservers();
    //自身操作
    void operation();//具体的业务方法
}

/**
 * 消息发布者
 * 该类是我们要实现观察者模式的额外类
 * 具体主题角色:也叫具体目标类,实现抽象目标类的通知方法(代码中的notifyObservers)以及实现抽象目标类增删观察者方法,当具体主题发生改变时通知所有订阅自己的观察者
 * 必须是abstract抽象类
 */
abstract class AbstractSubject implements Subject{
    Vector<Observer> vector = new Vector<Observer>();

    @Override
    public void add(Observer observer){
        vector.add(observer);
    }

    @Override
    public void remove(Observer observer){
        vector.remove(observer);
    }

    //通知观察者,调用观察者接口
    @Override
    public void notifyObservers(){
        for (Observer observer : vector) {
            observer.update();
        }
    }
}

//普通借口的普通实现类。只需实现operation接口
class MySubject extends AbstractSubject{
    @Override
    public void operation() {
        System.out.println("具体目标状态改变");
        System.out.println("正在通知观察者。。。");
        notifyObservers();
        System.out.println("通知完毕!");
    }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值