• 观察者模式


    被观察者为商品,观察者为具体的业务实现,如发邮件,修改页面价格;当商品价格变化后,通知所有被观察者进行业务更新

    package observer;
    
    import java.util.HashSet;
    
    /**
     * @description 被观察者
     **/
    public class Product {
        private String price;
        private String name;
        private HashSet<Observer> observers =new HashSet<>(); //存放所有观察者
    
        public Product(String price, String name, HashSet<Observer> observers) {
            this.price = price;
            this.name = name;
            this.observers = observers;
        }
    
        public String getPrice() {
            return price;
        }
    
        //价格变化的时候通知观察者
        public void setPrice(String price) {
            this.price = price;
            notifyOberver();
        }
        //通知所有观察者进行业务处理
        private void notifyOberver(){
            for (Observer o:observers){
                o.update(this);
            }
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public HashSet<Observer> getObservers() {
            return observers;
        }
    
        public void setObservers(HashSet<Observer> observers) {
            this.observers = observers;
        }
    
    
    }
    
    
    //观察者接口
    public interface Observer {
        //被观察者价格变化后,通知观察者更新业务(发邮件,更新页面价格)
        void update(Product product);
        //被观察者取消观察
        void unreg(Product product);
    }
    
    
    
    /**
     * @description 发邮件
     **/
    public class MailObserver implements Observer {
        @Override
        public void update(Product product) {
            System.out.println("发邮件,价格变化为:"+ product.getPrice());
        }
    
        @Override
        public void unreg(Product product) {
            product.getObservers().remove(this);
        }
    }
    
    
    /**
     * @description 修改页面价格
     **/
    public class PriceObserver implements Observer {
        @Override
        public void update(Product product) {
            System.out.println("修改页面价格,价格变化为:"+ product.getPrice());
        }
    
        @Override
        public void unreg(Product product) {
            product.getObservers().remove(this);
        }
    }
    
    import java.util.HashSet; public class ObserverTest { public static void main(String args[]){ Product p = new Product("10","java",new HashSet<>()); MailObserver o1 = new MailObserver(); PriceObserver o2 = new PriceObserver(); p.getObservers().add(o1); p.getObservers().add(o2); System.out.println("第1次变更价格"); p.setPrice("20"); o1.unreg(p); System.out.println("第2次变更价格"); p.setPrice("30"); } }

      

  • 相关阅读:
    Html.ActionLink 几种重载方式说明及例子
    2 python 文本特征提取 CountVectorizer, TfidfVectorizer
    模型调参---GridSearchCV
    1 NLP学习大纲
    pandas.dropna/isnull/fillna/astype的用法
    激活函数总结
    LeetCode--53 最大连续子序列(总结)
    LeetCode--44 通配符匹配
    LeetCode--Two_Sum
    css 背景图片自适应元素大小
  • 原文地址:https://www.cnblogs.com/Andrew520/p/11840643.html
Copyright © 2020-2023  润新知