zoukankan      html  css  js  c++  java
  • 观察者模式(1)

    观察者模式的四种角色:

    1、主题接口(Subject):规定了具体主题需要实现的方法

    2、观察者接口(Observer):规定了用来更新数据的方法

    3、具体主题(ConcreteSubject):实现主题接口

    4、具体观察者(ConcreteObserver):实现了观察者接口

    主题接口:
    
    package DesignPatterns.ObserverMode;
    
    public interface Subject {
        void addObserver(Observer observer);
        void deleteObserver(Observer observer);
        void notifyObserver();
    }
    
    具体主题:
    
    package DesignPatterns.ObserverMode;
    
    import javax.print.DocFlavor;
    import java.util.ArrayList;
    
    public class SeekJobCenter  implements  Subject{
        ArrayList<Observer> arrayList;
        String mess;
        boolean changed;
        public SeekJobCenter()
        {
            arrayList=new ArrayList<Observer>();
            mess="";
            changed=false;
        }
        @Override
        public void addObserver(Observer observer) {
            if (!arrayList.contains(observer))
            {
                arrayList.add(observer);
            }
        }
    
        @Override
        public void deleteObserver(Observer observer) {
            if (arrayList.contains(observer))
            {
                arrayList.remove(observer);
            }
        }
    
        @Override
        public void notifyObserver() {
            if (changed)
            {
                for (int i=0;i<arrayList.size();i++)
                {
                    Observer observer=arrayList.get(i);
                    observer.hearTelephone(mess);
                }
                changed=false;
            }
        }
        public void giveNewMess(String newmMess)
        {
            if (mess.equals(newmMess))
            {
                changed=false;
            }else {
                mess=newmMess;
                changed=true;
            }
        }
    }
    
    
    观察者接口:
    
    package DesignPatterns.ObserverMode;
    
    public interface Observer {
        void hearTelephone(String mess);
    }
    
    
    海归学生观察者:
    
    package DesignPatterns.ObserverMode;
    
    public class HStudent implements Observer {
        Subject subject;
        String messOfQiuZhi;
        public HStudent(String messOfQiuZhi,Subject subject)
        {
            this.subject=subject;
            subject.addObserver(this);
            this.messOfQiuZhi=messOfQiuZhi;
        }
        @Override
        public void hearTelephone(String mess) {
            System.out.println("海归大学生");
            System.out.println("我的求职意向:"+messOfQiuZhi);
            System.out.println("市场通知:"+mess);
            if (mess.equals(messOfQiuZhi))
            {
                System.out.println("求职意向相符,可以投递");
            }else {
                System.out.println("求职意向不符,不建议投递");
            }
        }
    }
    
    
    国内学生观察者:
    
    package DesignPatterns.ObserverMode;
    
    public class CStudent implements Observer {
        Subject subject;
        String messOfQiuZhi;
        public CStudent(String messOfQiuZhi,Subject subject)
        {
            this.subject=subject;
            subject.addObserver(this);
            this.messOfQiuZhi=messOfQiuZhi;
        }
        public void hearTelephone(String mess) {
            System.out.println("国内大学生");
            System.out.println("我的求职意向:"+messOfQiuZhi);
            System.out.println("市场通知:"+mess);
            if (mess.equals(messOfQiuZhi))
            {
                System.out.println("求职意向相符,可以投递");
            }else {
                System.out.println("求职意向不符,不建议投递");
            }
        }
    }
    
    
    测试类:
    
    package DesignPatterns.ObserverMode;
    
    public class Application {
        public static void main(String[] args) {
            SeekJobCenter seekJobCenter=new SeekJobCenter();
            CStudent cStudent=new CStudent("java程序员",seekJobCenter);
            HStudent hStudent=new HStudent("产品经理",seekJobCenter);
            seekJobCenter.giveNewMess("java程序员");
            seekJobCenter.notifyObserver();
            seekJobCenter.deleteObserver(cStudent);
            seekJobCenter.giveNewMess("产品经理");
            seekJobCenter.notifyObserver();
        }
    }

  • 相关阅读:
    图片的通道数和卷积核的深度
    神经网络中使用Batch Normalization 解决梯度问题
    python3没有urllib2 出现报错:语法错误
    pip安装时ReadTimeoutError解决办法
    我的学习
    动态(不定长)数组初始化
    关于c中的一些新函数
    排序算法
    vc6.0批量加注释
    endnote的安装和使用必备的几个步骤(简单有效整理版)
  • 原文地址:https://www.cnblogs.com/dloading/p/10754518.html
Copyright © 2011-2022 走看看