这种设计模式比较简单,属于一对多。类似顾客与报社的关系,顾客订阅报纸,每当有新闻发布时快递员一一给订阅报纸的顾客配送
下面是代码实现
两个接口
/**
* 被观察者
*
* 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