• 观察者设计模式介绍


    被观察者(事件源)

    package com.dwz.concurrency2.chapter4;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Subject {
        private List<Observer> observers = new ArrayList<>();
        
        private int state;
        
        public int getState() {
            return this.state;
        }
        
        public void setState(int state) {
            if(state == this.state) {
                return;
            }
            this.state = state;
            notifyAllObserver();
        }
        
        public void attach(Observer observer) {
            observers.add(observer);
        }
        
        private void notifyAllObserver() {
            observers.stream().forEach(Observer::update);
        }
    }

    观察者抽象类

    package com.dwz.concurrency2.chapter4;
    
    public abstract class Observer {
        protected Subject subject;
        
        public Observer(Subject subject) {
            this.subject = subject;
            this.subject.attach(this);
        }
        
        public abstract void update();
    }

    观察者1-二进制观察者

    package com.dwz.concurrency2.chapter4;
    
    public class BinaryObserver extends Observer {
        
        public BinaryObserver(Subject subject) {
            super(subject);
        }
        
        @Override
        public void update() {
            System.out.println("Binary String:" + Integer.toBinaryString(subject.getState()));
        }
        
    }

    观察者2-八进制观察者

    package com.dwz.concurrency2.chapter4;
    
    public class OctalObserver extends Observer {
        
        public OctalObserver(Subject subject) {
            super(subject);
        }
        
        @Override
        public void update() {
            System.out.println("Octal String:" + Integer.toOctalString(subject.getState()));
        }
    }

    测试类

    package com.dwz.concurrency2.chapter4;
    
    public class ObserverClient {
        public static void main(String[] args) {
            final Subject subject = new Subject();
            new BinaryObserver(subject);
            new OctalObserver(subject);
            System.out.println("==================");
            subject.setState(10);
            
            System.out.println("==================");
            subject.setState(10);
            
            System.out.println("==================");
            subject.setState(15);
        }
    }    
  • 相关阅读:
    php解决前端调接口跨域问题
    降低token 被盗风险安全问题
    u盘怎么解除写保护状态,u盘写保护怎么去掉
    安装vsftpd时出现错误
    对于vim 编译器的设置
    Vim 怎么设置显示行号,永久性显示行号
    Ubuntu系统设置过程中信息显示不全
    控制文件夹名显示的长短
    linux中好玩的游戏
    安装VMware Tools
  • 原文地址:https://www.cnblogs.com/zheaven/p/12107493.html
Copyright © 2020-2023  润新知