观察者模式

概念

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

角色

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

利弊

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();
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容