发布订阅模式

发布订阅模式测试类
public class PublishSubscribeDemo {
    public static void main(String[] args) {
        // 创建发布者
        TangSeng publisher = new TangSeng();
        // 创建订阅者
        Subscribe subscriber1 = new SubscribeWuKong();
        Subscribe subscriber2 = new SubscribeWuNeng();
        Subscribe subscriber3 = new SubscribeWuJing();
        // 发布者注册订阅者
        publisher.addObserver(subscriber1);
        publisher.addObserver(subscriber2);
        publisher.addObserver(subscriber3);
        // 发布消息
        publisher.notifyObservers("女儿国国王逼着成亲...");
        publisher.notifyObservers("被妖怪抓走了");
        publisher.notifyObservers("%#$@#%$#%...");
        // 移除订阅者
        publisher.removeObserver(subscriber2);
        // 再次发布消息
        publisher.notifyObservers("被抓走了");
    }
}

消息发布者类

public class TangSeng {

    private final List<Subscribe> observers=new ArrayList<>();

    public void addObserver(Subscribe observer) {
        observers.add(observer);
    }

    public void removeObserver(Subscribe observer) {
        observers.remove(observer);
    }

    public void notifyObservers(String message) {
        for (Subscribe observer : observers) {
            observer.update(message);
        }
    }
}

订阅者接口

public interface Subscribe {
    void update(String message);

}

具体订阅者

public class SubscribeWuKong implements Subscribe {
    @Override
    public void update(String message) {
        System.out.println("WuKong received message: " + message);
        // do something
        if(message.contains("成亲")){
            System.out.println(" 这要看师父的道行了...");
        }
        if(message.contains("抓")){
            System.out.println(" 找观音菩萨诉苦,并请求降妖...");
        }
        if(message.contains("%#$")){
            System.out.println(" 头痛欲裂...");
        }
    }
}
public class SubscribeWuNeng implements Subscribe {
    @Override
    public void update(String message) {
        System.out.println("WuNeng received message: " + message);
        // do something
        if(message.contains("成亲")){
            System.out.println(" 师父,你就答应了算了...");
        }
        if(message.contains("抓")){
            System.out.println(" 大师兄师父被妖怪抓走了...");
        }
        if(message.contains("%#$")){
            System.out.println(" 表面嬉笑,实则心疼大师兄!");
        }
    }
}
public class SubscribeWuJing implements Subscribe {
    @Override
    public void update(String message) {
        System.out.println("WuJing received message: " + message);
        // do something
        if(message.contains("成亲")){
            System.out.println(" 这可如何是好...");
        }
        if(message.contains("抓")){
            System.out.println(" 大师兄、二师兄,师父被妖怪抓走了...");
        }
        if(message.contains("%#$")){
            System.out.println(" 师父别念啦... ");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值