美文网首页
观察者模式

观察者模式

作者: Neo_xu | 来源:发表于2018-09-30 16:20 被阅读0次

概念

定义一个对象和其他对象的关系,当这个对应改变状态时,其他的用户接收到消息并自动更更新。

角色

  • 具体被观察者角色
  • 抽象观察者角色
  • 具体观察者角色
  • 抽象被观察者角色

利弊

demo:
观察者模式在软件开发的应用是很频繁的,例如用户做了某些操作,需要发送消息通知渠道,这个时候就可以使用观察者模式了

/** 
* @ClassName: Observer 
* @Description: 抽象观察者
* @author xushaoxin
* @date 2018年9月30日 下午2:11:10 
*  
*/
public interface Observer {
    public void message(String message);
}
/** 
* @ClassName: Observerable 
* @Description: 具体被观察者角色
* @author xushaoxin
* @date 2018年9月30日 下午2:09:09 
*  
*/
public interface Observerable {
    public void registerObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObserver();
}
/** 
* @ClassName: SMSOberver 
* @Description: 短信观察者
* @author xushaoxin
* @date 2018年9月30日 下午2:59:09 
*  
*/
public class SMSOberver implements Observer {

    @Override
    public void message(String message) {
        System.out.println("短信+"+message);
    }

}
/** 
* @ClassName: WechatOberver 
* @Description: 微信观察者
* @author xushaoxin
* @date 2018年9月30日 下午2:40:04 
*  
*/
public class WechatOberver implements  Observer {

    @Override
    public void message(String message) {
        System.out.println("微信"+message);
    }

}

/** 
* @ClassName: User 
* @Description: 用户
* @author xushaoxin
* @date 2018年9月30日 下午2:35:59 
*  
*/
public class User implements Observerable {
    
    List<Observer> list = new  ArrayList<>();
    String message ;
    

    /** 
    * @return message 
    */
    public String getMessage() {
        return message;
    }

    /** 
    * @param message 要设置的 message 
    */
    public void setMessage(String message) {
        this.message = message;
    }

    @Override
    public void registerObserver(Observer o) {
        list.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        if(!list.isEmpty()){
            list.remove(o);
        }
    }

    @Override
    public void notifyObserver() {
        for(Observer observer:list){
            observer.message(message);
        }
    }

}

    public static void main(String[] args) {
        Observer wechatMessage = new WechatOberver();
        User user = new User();
        user.setMessage("登录");
        user.registerObserver(wechatMessage);
        user.notifyObserver();
        Observer sms = new SMSOberver();
        user.registerObserver(sms);
        user.notifyObserver();
        user.removeObserver(sms);
        user.notifyObserver();
    }

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

      本文链接:https://www.haomeiwen.com/subject/ieqwoftx.html