java设计模式之观察者模式模式

java学习-设计模式-observer模式

一 定义

     观察者模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。

二 代码实例

  1. 需求 

    前台帮忙盯着老板的到来,然后通知所要通知的人,开始认真工作

  2. 代码实现

主题抽象类:

public abstract class Subject {
    private String subjectState;

    public String getSubjectState() {
        return subjectState;
    }

    public void setSubjectState(String subjectState) {
        this.subjectState = subjectState;
    }

    public abstract void attach(Observer observer);
    public abstract void detach(Observer observer);
    public abstract void inform();
}

主题实现类:

public class Boss extends Subject {//观察的对象

    private List<Observer> observers = new ArrayList<>();

    @Override
    public void attach(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void inform() {
        for (Observer obs : observers) {
            obs.update();
        }
    }
}
public class Secretary extends Subject {

    private List<Observer> observers = new ArrayList<>();

    @Override
    public void attach(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void inform() {
        for (Observer obs : observers) {
            obs.update();
        }
    }
}

观察者抽象类:

public abstract class Observer {
    private String name;
    private Subject subject;

    public Observer(String name, Subject subject) {
        this.name = name;
        this.subject = subject;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Subject getSubject() {
        return subject;
    }

    public void setSubject(Subject subject) {
        this.subject = subject;
    }

    public abstract void update();

}

观察者实现类:

public class NBAObserver extends Observer {//具体通知的对象

    public NBAObserver(String name, Subject subject) {
        super(name, subject);
    }

    @Override
    public void update() {
        System.out.println(getSubject().getSubjectState() + "," + getName() + "关闭NBA比赛直播,继续工作");
    }
}
public class StockObserver extends Observer {

    public StockObserver(String name, Subject subject) {
        super(name, subject);
    }

    @Override
    public void update() {
        System.out.println(getSubject().getSubjectState() + "," + getName() + "关闭股票行情,继续工作");
    }
}

测试类:

扫描二维码关注公众号,回复: 11320604 查看本文章
public class Test {
    public static void main(String[] args) {
        Secretary secretary = new Secretary();
        secretary.attach(new StockObserver("张三",secretary));
        secretary.attach(new NBAObserver("李四",secretary));
        secretary.setSubjectState("老板回来了");
        secretary.inform();
    }
}

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

猜你喜欢

转载自blog.csdn.net/qq_31689009/article/details/102454416