设计模式 之 观察者模式

前言

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。

模式的定义与特点

观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。

  • 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。

  • 目标与观察者之间建立了一套触发机制。

代码实现:

创建 Subject 和 Observer接口:

public interface Subject {
    void registerObserver(Observer o);
    void removeObserver(Observer o);
    void show();
}

public interface Observer {
    void update(String message);
}

创建 MainSubject 类

public class MainSubject implements Subject {

    private String message;
    private ArrayList<Observer> observers;

    public MainSubject() {
        observers = new ArrayList<Observer>();
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @Override
    public void registerObserver(Observer o) {
        observers.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        observers.remove(o);
    }

    @Override
    public void show() {
        for(Observer o : observers){
            o.update(message);
        }
    }

创建 Observer_A 和 Observer_B 类:

public class Observer_A implements Observer {
    @Override
    public void update(String message) {
        System.out.println("Observer_A的信息更新为:" + message);
    }
}

public class Observer_B implements  Observer {
    @Override
    public void update(String message) {
        System.out.println("Observer_B的信息更新为:" + message);
    }
}

创建Client类进行测试:

public class Client {

    @Test
    public void test(){
        MainSubject ms = new MainSubject();
        Observer_A a = new Observer_A();
        ms.registerObserver(a);
        ms.registerObserver(new Observer_B());
        ms.setMessage("今天去上学!");
        ms.show();
    }

}

运行结果:

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值