• 设计模式之观察者(Observer)模式 代码详解


    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * User: HYY
     * Date: 13-10-28
     * Time: 下午1:34
     * To change this template use File | Settings | File Templates.
     */
    
    /**
     * 这里使用接口是因为各个观察者可能有各自的独特的方法和属性,因此将其抽象成方法
     */
    interface Observer {
        void update();
    }
    
    interface Subject {
        void addObserver(Observer observer);
    
        void deleteObserver(Observer observer);
    
        void notifyObservers();
    }
    
    class ConcreteObserver implements Observer {
        private String ObserverName;
        private Subject subject;//一个指向主题的引用,
    
        public ConcreteObserver(String ObserverName, Subject subject) {
            this.ObserverName = ObserverName;
            this.subject = subject;
            if (this.subject != null) {
                this.subject.addObserver(this);
            }
        }
    
        @Override
        public void update() {
            //在这个方法中可以通过它,来判断自己关注的数据是否发生变化,并作出相应的行动
            System.out.println(ObserverName + " 已经被更新!");
        }
    }
    
    class ConcreteSubject implements Subject {
        List<Observer> observerList;
    
        public ConcreteSubject() {
            this.observerList = new ArrayList<Observer>();
        }
    
        @Override
        public void addObserver(Observer observer) {
            if (observer != null) {
                if (observerList.contains(observer)) {
                    System.out.println("已有该观察者,无需添加!");
                } else {
                    observerList.add(observer);
                }
            }
        }
    
        @Override
        public void deleteObserver(Observer observer) {
            observerList.remove(observer);
        }
    
        @Override
        public void notifyObservers() {
            for (Observer observer : observerList) {
                observer.update();
            }
        }
    }
    
    public class MyObserverTest {
        public static void main(String[] args) {
            //初始化4个观察者和一个被观察对象,构造函数自动将观察的对象附上关系
            ConcreteSubject subject = new ConcreteSubject();
    
            ConcreteObserver observer1 = new ConcreteObserver("观察者(1)", subject);
            ConcreteObserver observer2 = new ConcreteObserver("观察者(2)", subject);
            ConcreteObserver observer3 = new ConcreteObserver("观察者(3)", subject);
            ConcreteObserver observer4 = new ConcreteObserver("观察者(4)", subject);
    
            subject.notifyObservers();
        }
    }
  • 相关阅读:
    南阳118--修路方案(次小生成树)
    Poj3026--Borg Maze(Bfs+Prime)
    sql常识- UNIQUE
    sql常识-FULL JOIN
    sql常识-RIGHT JOIN
    sql常识-LEFT JOIN
    sql常识-INNER JOIN
    sql常识-Join
    sql常识-Alias
    sql常识-BETWEEN 操作符
  • 原文地址:https://www.cnblogs.com/wuyou/p/3425145.html
Copyright © 2020-2023  润新知