• 观察者模式(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,输出结果

  • 相关阅读:
    idea执行报错NoClassDefFoundError
    git合并几个commit
    jenkins+allure+持续构建+一些配置和遇到的问题
    接口框架坑记录
    jvm-sandbox对运行中的java执行文件做插桩,故障注入
    linux 安装nogui-chrome,构造selenium运行环境
    python之pychram激活码
    python之闭包、装饰器、生成器、反射
    python之 Requests入门到实践
    Python使用xlwt模块 操作Excel文件(转载)
  • 原文地址:https://www.cnblogs.com/maigao/p/13032579.html
Copyright © 2020-2023  润新知