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();
        }
    }
  • 相关阅读:
    mvc 数据验证金钱格式decimal格式验证
    VMware与CentOS的安装与Linux简单指令
    rbac组件引用
    Django--CRM--菜单展示, 删除合并, 权限展示
    Django--CRM--菜单排序等
    Django--CRM--一级, 二级 菜单表
    Django--权限信息操作
    Django--CRM--modelformset的用法
    Django--CRM--QueryDict, 模糊搜索, 加行级锁
    Django--CRM-客户列表展示, 分页
  • 原文地址:https://www.cnblogs.com/lxcmyf/p/7345005.html
Copyright © 2011-2022 走看看