报纸的配送方式:订阅发布模式

这种设计模式比较简单,属于一对多。类似顾客与报社的关系,顾客订阅报纸,每当有新闻发布时快递员一一给订阅报纸的顾客配送

下面是代码实现
两个接口
/**
 *      被观察者
 *
 * Created by Vola on 2020/10/26.
 */
interface News {

    void addReader(Reader reader);

    void removeReader(Reader reader);

    void publishNews(String content);

}
/**
 *      观察者
 * Created by Vola on 2020/10/26.
 */
interface Reader {
    void received(String content);
}
两个实现
/**
 *      被观察者实现
 * 
 * Created by Vola on 2020/10/26.
 */
public class NewsPaper implements News{

    private List<Reader> readerList = new LinkedList<>();

    @Override
    public void addReader(Reader reader) {
        readerList.add(reader);
    }

    @Override
    public void removeReader(Reader reader) {
        if (readerList.contains(reader)) {
            readerList.remove(reader);
        }
    }

    @Override
    public void publishNews(String content) {
        for (Reader reader : readerList) {
            reader.received(content);
        }
    }
}
/**
 *      观察者实现
 *
 * Created by Vola on 2020/10/26.
 */
public class StudentReader implements Reader{

    private String name;

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

    @Override
    public void received(String content) {
        System.out.println("[" + name + "]--->" + content);
    }
}
最后是运行试验
    public static void main(String[] args) {

        StudentReader studentReader1 = new StudentReader("史珍香1");
        StudentReader studentReader2 = new StudentReader("史珍香2");
        StudentReader studentReader3 = new StudentReader("史珍香3");

        NewsPaper newsPaper = new NewsPaper();
        newsPaper.addReader(studentReader1);
        newsPaper.addReader(studentReader2);
        newsPaper.addReader(studentReader3);

        newsPaper.publishNews("二狗子呼叫土豆~");
    }

执行结果

> Task :java_lib:MyClass.main()
[史珍香1]--->二狗子呼叫土豆~
[史珍香2]--->二狗子呼叫土豆~
[史珍香3]--->二狗子呼叫土豆~

BUILD SUCCESSFUL in 9s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值