观察者模式

介绍

属于行为型设计模式,它定义了一种一对多的的依赖共享,当一个对象的状态发生改变事,其所有依赖者都会收到通知并自动更新

举例

一个博主有多个粉丝,博主一发布消息,粉丝列表则会收到消息

博主/被观察者

import java.util.ArrayList;
import java.util.List;

/**
 * 博主/被观察者
 * @author aaa
 */
public class Blogger {

    /**
     * 博客内容
     */
    private String message;

    /**
     * 粉丝列表
     */
    private List<Fans> fansList=new ArrayList<>();

    /**
     * 添加粉丝
     * @param fans
     */
    public void addFans(Fans fans){
        fansList.add(fans);
    }

    /**
     * 删除指定粉丝
     * @param fans
     */
    public void removeFans(Fans fans){
        fansList.remove(fans);
    }

    /**
     * 发布消息并通知粉丝列表
     * @param message
     */
    public void publishMessage(String message){
        this.message=message;
        noticeFans();
    }

    /**
     * 通知粉丝列表
     */
    private void noticeFans(){
        fansList.forEach(fans -> fans.receive(this.message));
    }
}

粉丝接口/观察者

/**
 * 粉丝接口/观察者
 * @author aaa
 */
public interface Fans {

    void receive(String message);
}

具体粉丝

/**
 * 具体粉丝
 * @author aaa
 */
public class FansImpl implements Fans{

    /**
     * 姓名
     */
    private String name;

    public FansImpl(String name){
        this.name=name;
    }

    @Override
    public void receive(String message) {
        System.out.println(this.name + "收到:" + message);
    }
}

测试

import org.junit.Test;

/**
 *
 * @author aaa
 */
public class ObserverPattern {

    @Test
    public void test(){
        Blogger ikun = new Blogger();
        Fans zhangSan=new FansImpl("张三");
        Fans liSi=new FansImpl("李四");
        ikun.addFans(zhangSan);
        ikun.addFans(liSi);
        ikun.publishMessage("ikun");
        ikun.removeFans(zhangSan);
        ikun.publishMessage("ikun1");
    }
}

控制台打印

张三收到:ikun
李四收到:ikun
李四收到:ikun1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值