美文网首页
Observer Pattern

Observer Pattern

作者: 杨志聪 | 来源:发表于2024-06-12 09:24 被阅读0次

    解决的问题

    一个Excel表格,你修改一个地方的数值(DataSource),相关的图表(Chart)和另一个表格(SpreadSheet)也会同步发生变化。

    代码

    Observer:

    package com.cong.designpattern.observer;
    
    public interface Observer {
        public void update(int newValue);
    }
    

    DataSource:

    package com.cong.designpattern.observer;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class DataSource {
        private int value;
        private List<Observer> observers;
        public DataSource() {
            this.value = 0;
            this.observers = new ArrayList<>();
        }
        public int getValue() {
            return value;
        }
        public void setValue(int value) {
            this.value = value;
            this.notifyObservers(value);
        }
        public void addObserver(Observer observer) {
            this.observers.add(observer);
        }
        public void removeObserver(Observer observer) {
            this.observers.remove(observer);
        }
        private void notifyObservers(int value) {
            for (Observer observer : this.observers) {
                observer.update(value);
            }
        }
    }
    

    Chart:

    package com.cong.designpattern.observer;
    
    public class Chart implements Observer {
        @Override
        public void update(int newValue) {
            System.out.println("Chart did updated with " + newValue);
        }
    }
    

    SpreadSheet:

    package com.cong.designpattern.observer;
    
    public class SpreadSheet implements Observer {
        @Override
        public void update(int newValue) {
            System.out.println("Spread sheet did updated with " + newValue);
        }
    }
    

    Test code:

    DataSource dataSource = new DataSource();
    SpreadSheet spreadSheet = new SpreadSheet();
    Chart chart = new Chart();
    dataSource.addObserver(spreadSheet);
    dataSource.addObserver(chart);
    dataSource.setValue(1);
    

    UML

    Observer Pattern UML

    相关文章

      网友评论

          本文标题:Observer Pattern

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