package com.zjh.designmodel.ObseverModel;
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;
/*
`````````````````观察者模式`````````````````
*/
public class ObserverModel {
public static void main(String[] args) {
ObserverImpl o1 = new ObserverImpl("O1");
ObserverImpl o2 = new ObserverImpl("O2");
ObserverImpl o3 = new ObserverImpl("O3");
SubjectImpl subject = new SubjectImpl();
subject.addObserver(o1);
subject.addObserver(o2);
subject.addObserver(o3);
subject.executeUpdate("执行");
subject.removeObserver(o2);
subject.executeUpdate("执行");
}
}
/* 定义被观察者
*/
interface Observer{
void update(String message);
}
class ObserverImpl implements Observer{
private String ObserverName;
public ObserverImpl(String observerName)
{
this.ObserverName=observerName;
}
private void MyNotifyMethod(){
System.out.println("被观察者:"+this.ObserverName+"=>执行");
}
@Override
public void update(String message) {
if (message.equals("执行"))
{
this.MyNotifyMethod();
}
}
}
interface Subject {//订阅中心接口
void addObserver(Observer observer);
void removeObserver(Observer observer);
void executeUpdate(String message);
}
class SubjectImpl implements Subject{
private List<Observer> observers=new ArrayList<Observer>();
@Override
public void addObserver(Observer observer) {
this.observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
this.observers.remove(observer);
}
@Override
public void executeUpdate(String message) {
observers.forEach(e->{
e.update(message);
});
}
}