设计模式【十三】观察者模式

说明:观察者中包含全部待观察的对象,可以自由的添加删除待观察的对象。统一的向对象发布通知消息。比较类似消息中间中的消息订阅模式。

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();
    }

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值