设计模式学习--观察者模式

观察者模式(Observer):观察者模式又叫发布-订阅模式,

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

Java中自带了观察者模式的Observer和Observerable。本文自己写了一个。

案例需求:自习课,大家都在玩耍,一个学生放哨,老师来了就通知大家老师来了。

1;创建一个通知者接口。(放哨的学生实现)

package ObserverModel;

public interface  Subj {

    void Attach(Obs obs);
    void detach(Obs obs);
    void message();
}

2:创建观察者超类。(玩耍的学生实现)

package ObserverModel;

public abstract class Obs {

    protected String name;
    protected Subj sub;
    public Obs (String name,Subj sub){
        this.name=name;
        this.sub=sub;
    }
    
    public abstract void update();
}

3:创建放哨学生的类,观察老师来没。

package ObserverModel;

import java.util.LinkedList;
import java.util.List;

public class seeTeacher implements Subj {

    //同事列表
    List<Obs>list=new LinkedList<Obs>();
    private String action;
    
    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    @Override
    public void Attach(Obs obs) {
        // TODO Auto-generated method stub
        list.add(obs);
    }

    @Override
    public void detach(Obs obs) {
        // TODO Auto-generated method stub
        list.remove(obs);
    }

    @Override
    public void message() {
        // TODO Auto-generated method stub
        for(Obs o:list){
            o.update();
        }
    }

}

4:创建玩耍的boy

package ObserverModel;

public class PlayBoy extends Obs {

    public PlayBoy(String name, Subj sub) {
        super(name, sub);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void update() {
        System.out.println(name+"老师来了");
        
    }

    

}

5:创建玩耍的boy。

package ObserverModel;

public class PlayBoy2 extends Obs {
    
    public PlayBoy2(String name, Subj sub) {
        super(name, sub);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void update() {
        // TODO Auto-generated method stub
        System.out.println(name+"老师来了");
    }

}

6:测试类。

package ObserverModel;

/**
 * 案例需求:老师出去了,放哨的同学通知里面玩耍的同学,老师来了。
 * 观察者模式:观察者模式又叫发布-订阅模式
 * 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听
 * 某一个主题对象,这个主题对象在状态发生改变的时候,会通知所有观察者的对象,
 * 使得他们能够自动更新自己。
 * @author 我不是张英俊
 *
 */
public class Test {

    public static void main(String[] args) {
        
        seeTeacher teacher=new seeTeacher();
        PlayBoy playboy=new PlayBoy("李小璐", teacher);
        PlayBoy2 playBoy2=new PlayBoy2("哪吒", teacher);
        
        teacher.Attach(playboy);
        teacher.Attach(playBoy2);
        teacher.message();
    }
}

7:控制台

李小璐老师来了
哪吒老师来了
原文地址:https://www.cnblogs.com/hrlizhi/p/7693253.html