zoukankan      html  css  js  c++  java
  • 观察者模式(UML)应用

    1,观察者模式,可以实现模块化分离,添加与删除模块的便捷

        

    2,被观察者抽象类

    public abstract class Subject {
        private String name;
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        //链表保存观察者--添加,删除,
        protected List<Observer> observers = new ArrayList<>();
        public void add(Observer observer){
            observers.add(observer);
        }
        public void remove(Observer  observer){
            observers.remove(observer);
        }
        
        //通知观察者
        public abstract void notifyOberver(String name);
    }

    3,被观察者实体类1

    /**
     *    被观察者的实体类1
     *    
     * @author lenovo
     *
     */
    public class ConcreteSubject extends Subject {
    
        @Override
        public void notifyOberver(String name) {
            System.out.println("具体主题发生了变化,来自人民日报");
            //实现通知所有观察者
            for(Object obs : observers){
                ((Observer) obs).update(name);
            }
    
        }
    
    }

    4,被观察者实体类2

    /**
     *    被观察者的实体类2
     *    
     * @author lenovo
     *
     */
    public class ConcreteSubject2 extends Subject {
    
        @Override
        public void notifyOberver(String name) {
            System.out.println("具体主题发生了变化,中国日报");
            //实现通知所有观察者
            for(Object obs : observers){
                ((Observer) obs).update(name);
            }
            System.out.println("List: "+observers.size());
    
        }
    
    }

    5,观察者接口

    /**
     *   观察者接口
     *   
     * @author lenovo
     *
     */
    public interface Observer {
        public void update(String name);
        
    }

    6,观察者接口实体类1

    /**
     * 观察者接口实体类1
     * @author lenovo
     *
     */
    public class Observer1 implements Observer {
    
        @Override
        public void update(String name) {
            System.out.println("观察者实体类1---"+name+"---更新了");
    
        }
    
    }

    7,观察者接口实体类2

    public class Observer2 implements Observer {
    
        @Override
        public void update(String name) {
            System.out.println("观察者实体类2---"+name+"----更新了");
    
        }
    
    }

    8, 测试

    public class Test {
        public static void main(String[] args) {
            //观察者实体类对象
            Observer1 bObserver1 = new Observer1();
            Observer2 bObserver2 = new Observer2();
            
            //被观察者实体类1
            ConcreteSubject subject = new ConcreteSubject();
            subject.add(bObserver1);
            subject.add(bObserver2);
            //通知
            subject.notifyOberver("老王");
            
            //被观察者实体类2
            ConcreteSubject2 subject2 = new ConcreteSubject2();
            subject2.add(bObserver1);
            subject2.add(bObserver2);
            //通知
            subject2.notifyOberver("老黄");
            
        }
    }

    9,输出结果

  • 相关阅读:
    nginx变量(日志log_format)
    nginx中间件
    social-auth-app-django集成第三方登录
    Django REST Framework限速
    django-redis
    Django REST Framework extensions
    django-rest-framework-jwt
    FromXml 支付回调 xml 转数组
    下个月此时
    PHP 暂停函数 sleep() 与 usleep() 的区别
  • 原文地址:https://www.cnblogs.com/maigao/p/13032579.html
Copyright © 2011-2022 走看看