zoukankan      html  css  js  c++  java
  • Chapter 14 观察者模式

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

    观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化。

    代码如下:

    package xiao;

    import java.util.ArrayList;
    import java.util.List;

    interface Subject{
        void Attach(Observer observer);
        void Detach(Observer observer);
        void Notify();
        String getSubjectState();
        void setSubjectState(String subjectState);
    }

    abstract class Observer{
        protected String name;
        protected Secretary sub;
        public abstract void update();
    }
    class Secretary implements Subject{
        private List<Observer> observers = new ArrayList<Observer>();
        private String subjectState;
        public void Attach(Observer observer){
            observers.add(observer);
        }
        public void Detach(Observer observer){
            observers.remove(observer);
        }
        public void Notify(){
            for(Observer o:observers){
                o.update();
            }
        }
        public String getSubjectState() {
            return subjectState;
        }
        @Override
        public void setSubjectState(String subjectState) {
            this.subjectState = subjectState;
            
        }
    }

    class StockObserver extends Observer
    {
        public StockObserver(String name,Secretary sub){
            this.name = name;
            this.sub = sub;
        }
        public void update(){
            System.out.println(sub.getSubjectState()+this.name+"关闭股票,继续工作");
        }
    }
    class NBAObserver extends Observer
    {
        public NBAObserver(String name,Secretary sub){
            this.name = name;
            this.sub = sub;
        }
        public void update(){
            System.out.println(sub.getSubjectState()+this.name+"关闭NBA,继续工作");
        }
    }

    public class abc {
        public static void main(String[] args) {
            Secretary tongzizhe = new Secretary();
            StockObserver tongshi1 = new StockObserver("mike", tongzizhe);
            NBAObserver tongshi2 = new NBAObserver("dave", tongzizhe);
            tongzizhe.Attach(tongshi2);
            tongzizhe.Attach(tongshi1);
            tongzizhe.setSubjectState("boss is coming ");
            tongzizhe.Notify();
        }
    }

  • 相关阅读:
    ssm框架整合入门系列——配置SpringMVC dispatcherServlet-servlet.xml
    vue学习——v-for语句
    ssm框架整合入门系列——编写ssm整合的关键配置文件(web.xml)
    ssm框架整合入门系列——maven工程引入jar包
    jQuery(7)——DOM操作 html,html,val,attr方法
    ssm框架整合入门系列——MyEclipse创建maven工程
    ssm框架整合入门系列——一个简单的用户管理系统
    Vue学习(0)——第一个demo
    jQuery(6)——jQuery animate动画
    julia开发环境安装——VS code扩展和JuliaPro两种方式
  • 原文地址:https://www.cnblogs.com/tuifeideyouran/p/3742742.html
Copyright © 2011-2022 走看看