• 观察者设计模式


    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.运行结果

  • 相关阅读:
    红帽RHEL7版本RHCE认证学习及考试经历
    高手总结的“恋爱法”学习Linux系统,效果更好。
    IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)
    深度剖析Linux与Windows系统的区别
    浅谈学习掌握linux系统的优势
    新手要想学好Linux系统就必须做好这四件事情
    为什么高手离不了Linux系统?这就是我的理由
    总结七条助你成为Linux高手的超棒忠告
    分享记录我的Linux系统入门学习经验
    Oracle--表有LONG类型复制或导数报ORA00990
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/11546197.html
Copyright © 2020-2023  润新知