2020-01-07
先看效果:
//观察者模式 测试
private void observerTest() {
MyObserverble b = new MyObserverble();
b.addObserver(new UserObserver("张三"));
b.addObserver(new UserObserver("李四"));
b.addObserver(new UserObserver("王麻子"));
b.pushMssage();
b.pushMssage("自定义消息");
b.pushMssage(b.list.get(0), "给指定对象发消息");
}
###输出结果:
被观察者发出消息:默认消息
张三收到消息:默认消息
李四收到消息:默认消息
王麻子收到消息:默认消息
被观察者发出消息:自定义消息
张三收到消息:自定义消息
李四收到消息:自定义消息
王麻子收到消息:自定义消息
被观察者发出消息:给指定对象发消息
张三收到消息:给指定对象发消息
开始写:
观察者:
/**
* 观察者接口
*/
interface BObserver {
void update(Object o);
}
/**
* 具体 观察者
*/
public class UserObserver implements BObserver {
private String name;
public UserObserver() {
}
public UserObserver(String name) {
this.name = name;
}
@Override
public void update(Object o) {
System.out.println(this.name + "收到消息:" + o);
}
@Override
public String toString() {
return "UserObserver{" + "name='" + name + '\'' + '}';
}
}
被观察者:
/**
* 被观察者接口
*/
public interface BObserverble {
BObserverble addObserver(BObserver o);
BObserverble removeObserver(BObserver o);
void pushMssage();
}
/**
* 具体 被观察者
*/
public class MyObserverble implements BObserverble {
//观察者清单
List<BObserver> list = new ArrayList<>();
@Override
public BObserverble addObserver(BObserver o) {
list.add(o);
return this;
}
@Override
public BObserverble removeObserver(BObserver o) {
list.remove(o);
return this;
}
@Override
public void pushMssage() {
pushMssage("默认消息");
}
/**
* 发送消息
*
* @param message 发送的消息内容
*/
public void pushMssage(String message) {
System.out.println("被观察者发出消息:" + message);
for (BObserver o : list) {
o.update(message);
}
}
/**
* 给指定对象 发送消息
*
* @param message 发送的消息内容
*/
public void pushMssage(BObserver bObserver, String message) {
System.out.println("被观察者发出消息:" + message);
for (BObserver o : list) {
if (o == bObserver) o.update(message);
}
}
}
完事儿
网友评论