说明:观察者中包含全部待观察的对象,可以自由的添加删除待观察的对象。统一的向对象发布通知消息。比较类似消息中间中的消息订阅模式。
1、类图:
2、实现
public abstract class AbstractExport {
protected String docName;
protected AbstractExportObserve abstractExportObserve;
public AbstractExport(AbstractExportObserve abstractExportObserve) {
this.abstractExportObserve = abstractExportObserve;
}
public abstract void update();
}
public abstract class AbstractExportObserve {
protected List<AbstractExport> abstractExportList = new ArrayList<>();
private String platform;
private String msgInfo;
public String getMsgInfo() {
return msgInfo;
}
public void setMsgInfo(String msgInfo) {
this.msgInfo = msgInfo;
}
public String getPlatform() {
return platform;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public void add(AbstractExport abstractExport) {
abstractExportList.add(abstractExport);
}
public void remove(AbstractExport abstractExport){
abstractExportList.add(abstractExport);
}
public void update() {
for (AbstractExport abstractExport: abstractExportList) {
abstractExport.update();
}
}
}
public class AsyncExport extends AbstractExport {
public AsyncExport(AbstractExportObserve abstractExportObserve) {
super(abstractExportObserve);
super.docName = "ASYNC";
}
@Override
public void update() {
System.out.println("export type:" + super.docName + ";msgInfo:" + abstractExportObserve.getMsgInfo() + "; platform:" + abstractExportObserve.getPlatform());
}
}
public class SyncExport extends AbstractExport {
public SyncExport(AbstractExportObserve abstractExportObserve) {
super(abstractExportObserve);
super.docName = "SYNC";
}
@Override
public void update() {
System.out.println("export type:" + super.docName + ";msgInfo:" + abstractExportObserve.getMsgInfo() + "; platform:" + abstractExportObserve.getPlatform());
}
}
public class CentosExportObserve extends AbstractExportObserve {
public CentosExportObserve() {
setPlatform("Centos");
}
}
public class WindowsExportObserve extends AbstractExportObserve {
public WindowsExportObserve() {
setPlatform("Windows");
}
}
public class ExportTest {
public static void main(String[] args) {
notifyCentos();
notifyWindows();
}
private static void notifyWindows() {
WindowsExportObserve windowsExportObserve = new WindowsExportObserve();
AsyncExport asyncExport = new AsyncExport(windowsExportObserve);
SyncExport syncExport = new SyncExport(windowsExportObserve);
windowsExportObserve.add(asyncExport);
windowsExportObserve.add(syncExport);
windowsExportObserve.setMsgInfo("test notice");
windowsExportObserve.update();
}
private static void notifyCentos() {
CentosExportObserve centosExportObserve = new CentosExportObserve();
AsyncExport asyncExport = new AsyncExport(centosExportObserve);
SyncExport syncExport = new SyncExport(centosExportObserve);
centosExportObserve.add(asyncExport);
centosExportObserve.add(syncExport);
centosExportObserve.setMsgInfo("test notice");
centosExportObserve.update();
}
}