zoukankan      html  css  js  c++  java
  • 23种设计模式之观察者模式

    观察者模式(Observer):定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

     

    package designMode.observer;
    
    import java.util.LinkedList;
    import java.util.List;
    
    abstract class Subject {
        
        private List<Observer> observers = new LinkedList<Observer>();
        
        public void addObserver(Observer observer){
            observers.add(observer);
        }
        public void removeObserver(Observer observer){
            observers.remove(observer);
        }
        public void notice(){
            for (Observer observer : observers) 
                observer.update();
        }
    }
    package designMode.observer;
    
    class ConcreteSubject extends Subject{
        
        private String subjectState;
    
        public String getSubjectState() {
            return subjectState;
        }
    
        public void setSubjectState(String subjectState) {
            this.subjectState = subjectState;
        }
        
    }
    package designMode.observer;
    
    interface Observer {
        
        public void update();
    }
    package designMode.observer;
    
    class ConcreteObserver implements Observer{
        
        private String name;
        private String observerState;
        private ConcreteSubject subject;
        
        public ConcreteObserver(String name, ConcreteSubject subject) {
            this.name = name;
            this.subject = subject;
        }
    
        @Override
        public void update() {
            observerState = subject.getSubjectState();
            System.out.println("该观察者的新状态是:"+name+" "+observerState);
        }
        
        public String getObserverState() {
            return observerState;
        }
    
        public void setObserverState(String observerState) {
            this.observerState = observerState;
        }
    
    
    }
    package designMode.observer;
    
    class Test {
        public static void main(String[] args) {
            ConcreteSubject s = new ConcreteSubject();
            s.addObserver(new ConcreteObserver("张三", s));
            s.addObserver(new ConcreteObserver("李四", s));
            s.addObserver(new ConcreteObserver("王五", s));
            s.setSubjectState("我更新了");
            s.notice();
        }
    }
  • 相关阅读:
    xcode 各种项目设置
    poj 2240 floyd算法
    MySQL參数binlog-do-db对binlogs写入的影响
    cocos2D(一)----第一个cocos2D程序
    mahout測试朴素贝叶斯分类样例
    sql for xml query sample
    辛星解读之php中的重点函数第一节之数组函数
    java集合经常出现空指针问题的解决方案
    java常量设置的方式
    java中如果需要精确的计算答案,请避免使用double类型与float类型
  • 原文地址:https://www.cnblogs.com/lxcmyf/p/7345005.html
Copyright © 2011-2022 走看看