观察者模式

介绍

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

举例

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

博主/被观察者

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

你可能感兴趣的:(设计模式,观察者模式)