当前位置: 移动技术网 > IT编程>开发语言>Java > java设计模式--观察者模式

java设计模式--观察者模式

2019年07月02日  | 移动技术网IT编程  | 我要评论
观察者模式:又称发布-订阅(Publish/Subscribe)模式。我们先看一个例子,现在直播行业越做越大,许多人都有关注自己喜欢的主播,人们订阅某一个主播,当该主播开播时,给订阅他的人发布提示说他开始直播了,这就是一个观察者模式的实例。 通知者类,提供了增加和删除,以及通知观察者对象的方法。 观 ...

  观察者模式:又称发布-订阅(publish/subscribe)模式。我们先看一个例子,现在直播行业越做越大,许多人都有关注自己喜欢的主播,人们订阅某一个主播,当该主播开播时,给订阅他的人发布提示说他开始直播了,这就是一个观察者模式的实例。

  通知者类,提供了增加和删除,以及通知观察者对象的方法。

//网络主播类
public class networkanchor {
    //定义一个观察者的集合
    list<people> observers = new arraylist<>();

    //当有人订阅了该主播,便把这个对象加入集合
    public void subscribe(people people){
        if(people!=null && !observers.contains(people)){
            observers.add(people);
        }
    }
    //取消订阅
    public void cancel(people people){
        observers.remove(people);
    }
    //主播开播时通知观察者
    public void notifypeople(){
        for (people people: observers) {
            people.update(this);
        }
    }
}

  

  观察者接口,在得到通知者的通知时更新自己。

//网民类
public interface people {
    //定义一个更新方法,用于更新状态
    void update(networkanchor networkanchor);
}

  

  具体的观察者对象。

//具体网民类a
public class peoplea implements people {

    @override
    public void update(networkanchor networkanchor) {
        system.out.println(this.getclass().getsimplename()+ "收到" + networkanchor.getclass().getsimplename() + "的消息"); } }
//具体网民类b
public class peopleb implements people {

    @override
    public void update(networkanchor networkanchor) {
        system.out.println(this.getclass().getsimplename()+ "收到" + networkanchor.getclass().getsimplename() + "的消息"); } }

  

  测试方法,首先创建一个主播类实例,将观察者a,b添加进去,然后发布通知。

//测试类
public class test {
    public static void main(string[] args) {
        networkanchor networkanchor = new networkanchor();
        networkanchor.subscribe(new peoplea());
        networkanchor.subscribe(new peopleb());
        networkanchor.notifypeople();
    }
}

测试结果:

peoplea收到networkanchor的消息
peopleb收到networkanchor的消息

 

  总结:当一个对象的改变需要改变其他对象,并且被改变对象不知道其他被改变对象时,我们可以使用观察者模式。并且使用观察者模式分离了观察者与被观察者,降低耦合程度,除此之外,当有其他的网络主播时,我们可以定义一个通知者的接口(这里不再实现),使所有通知者实现这个接口即可。让耦合的双方依赖抽象,符合依赖倒转原则。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网