• 观察者模式(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();
        }
    }

  • 相关阅读:
    vs2010配置驱动开发
    寒假训练 npuctf_2020_bad_guy(11/250)利用overlap与fastbin attack来篡改fd指针,从而通过stdout达到泄露libc
    寒假训练 [OGeek2019]bookmanager(10/250)
    寒假训练 npuctf_2020_level2(9/250)将heap分配到bss上,从而满足程序条件
    寒假训练 npuctf_2020_level2(8/250)修改ebp链来间接修改返回地址
    Windows XP源码跟踪
    寒假训练 houseoforange_hitcon_2016(7/250)
    寒假训练 jarvisoj_level6_x64(6/250)
    寒假训练 de1ctf_2019_weapon(5/250)
    glibc源码逆向——fwrite函数
  • 原文地址:https://www.cnblogs.com/dloading/p/10754518.html
Copyright © 2020-2023  润新知