• 观察者设计模式


    1.定义一个抽象Observe观察者

    1 public interface Observe {
    2     void update(Message message);
    3 }

    2.定义一个DBObserver观察者

    public class DBObserver implements Observe {
        ObservedSubject observedSubject;
        String name;
        public DBObserver(String name,ObservedSubject observedSubject){
            this.name=name;
            this.observedSubject=observedSubject;
            observedSubject.addObserver(this);
        }
        @Override
        public void update(Message message) {
            System.out.println("数据库"+message.id+message.name+message.content);
        }
    }

    3.定义一个EmailObserver观察者

     1 public class EmailObserver implements Observe {
     2     ObservedSubject observedSubject;
     3     String name;
     4     public EmailObserver(String name,ObservedSubject observedSubject){
     5         this.name=name;
     6         this.observedSubject=observedSubject;
     7         observedSubject.addObserver(this);
     8     }
     9     @Override
    10     public void update(Message message) {
    11         System.out.println("邮件"+message.id+message.name+message.content);
    12     }
    13 }

    4.定义一个AdminObserver观察者

     1 public class AdminObserver implements Observe {
     2     ObservedSubject observedSubject;
     3     String name;
     4     public AdminObserver(String name,ObservedSubject observedSubject){
     5         this.name=name;
     6         this.observedSubject=observedSubject;
     7         observedSubject.addObserver(this);
     8     }
     9     @Override
    10     public void update(Message message) {
    11         System.out.println("管理员!"+message.id+message.name+message.content);
    12     }
    13 }

    5.定义一个ObservedSubject被观察者

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class ObservedSubject {
     5     List<Observe> observers;
     6     private Message message;
     7     public ObservedSubject(){
     8         observers=new ArrayList<>();
     9     }
    10     public void addObserver(Observe observe){
    11         observers.add(observe);
    12     }
    13     public void removeObserver(Observe observe){
    14         observers.remove(observe);
    15     }
    16     public void notifyObserver(){
    17         for (Observe observer : observers) {
    18             observer.update(message);
    19         }
    20     }
    21     public void setMessage(Message message){
    22         this.message=message;
    23         this.notifyObserver();
    24     }
    25 }

    6.消息Message类

     1 public class Message {
     2     int id;
     3     String name;
     4     String email;
     5     String content;
     6 
     7     public int getId() {
     8         return id;
     9     }
    10 
    11     public void setId(int id) {
    12         this.id = id;
    13     }
    14 
    15     public String getName() {
    16         return name;
    17     }
    18 
    19     public void setName(String name) {
    20         this.name = name;
    21     }
    22 
    23     public String getEmail() {
    24         return email;
    25     }
    26 
    27     public void setEmail(String email) {
    28         this.email = email;
    29     }
    30 
    31     public String getContent() {
    32         return content;
    33     }
    34 
    35     public void setContent(String content) {
    36         this.content = content;
    37     }
    38 
    39     public Message(int id, String name, String email, String content) {
    40         this.id = id;
    41         this.name = name;
    42         this.email = email;
    43         this.content = content;
    44     }
    45 }

    7.测试

    public class Main {
    
        public static void main(String[] args) {
            ObservedSubject observedSubject = new ObservedSubject();
            DBObserver mysql = new DBObserver("mysql",observedSubject);
            EmailObserver qq = new EmailObserver("qq",observedSubject);
            AdminObserver usr = new AdminObserver("usr", observedSubject);
            Message message = new Message(1, "hong", "12@qq.com", "加油");
            observedSubject.setMessage(message);
        }
    }

    8.运行结果

  • 相关阅读:
    openlayers + webpack
    openlayers Map 和 es6的容器Map重名
    git 代理
    剑魂史诗套配装
    剑魂卢克攻略
    DNF斩铁剑魂每日1-5及打团须知
    APP自识别安卓苹果
    各浏览器老板键
    Apache+mod_encoding解决URL中文编码问题
    linux命令之crontab定时执行任务
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/11546197.html
Copyright © 2020-2023  润新知