设计模式(观察者模式)

1.观察者模式模式简介

观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。

Subject:抽象被观察者(目标)

  • 一个目标可以被多个观察者观察。目标变化时,目标会通知所有登记的观察者
  • 拥有一个抽象观察者的引用

Observer:抽象观察者

  • 得到目标的通知时更新自己。

ConcreteSubject:具体被观察者

  • 将状态存入具体现察者对象。自己变化时,给所有登记的观察者发出通知

ConcreteObserver:具体观察者

  • 拥有一个指向具体目标的引用

2.举例

演员表演
演员为大家表演节目,所有观看的观众会为他进行鼓掌

分析:
观众是观察者,应该实现Observer接口
演员是被观察者,应该继承实现Subject接口
当演员开始表演后,每个观众都会为其鼓掌。
Subject接口

public interface Subject {
     void perform();
}

Observer接口

public interface Observer {
     void applause();
}

Audience实现类

public class Audience implements Observer{
    private int id;

    public Audience(int id){
        this.id = id;
    }

    @Override
    public void applause() {
        System.out.println(id + "号观众为你鼓掌");
    }
}

Actor实现类

public class Actor implements Subject{
    private List<Audience> audiences = new ArrayList<>();

    public void add(Audience audience){
        audiences.add(audience);
    }

    @Override
    public void perform() {
        System.out.println("我为大家表演节目");
        for (Audience audience : audiences) {
            audience.applause();
        }
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        Actor actor = new Actor();
        actor.add(new Audience(1));
        actor.add(new Audience(4));
        actor.add(new Audience(5));
        actor.perform();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值