观察者模式 java_观察者模式 JAVA实现

import java.util.ArrayList;

import java.util.List;

/**

* 被观察对象

*/

class ObservedObject {

// 定义观察者的对象容器

protected List observers = new ArrayList<>();

// 实现构造方法

public ObservedObject() {

}

// 实现观察者的增添方法

public void add(Observer observer) {

if (observer == null) {

throw new NullPointerException();

}

observers.add(observer);

}

// 实现观察者删除方法

public void remove(Observer observer) {

if (observer == null) {

return;

}

observers.remove(observer);

}

// 实现删除所有观察者的方法

public void removeAll() {

observers.clear();

}

}

/**

* 观察者接口

*/

interface Observer {

// 继承Observer的类需要实现update方法

void update(ObservedObject obj);

}

/**

* 被观察者具体实现

*/

class ConcreteObject extends ObservedObject {

private String info;

public String getInfo() {

return info;

}

public void setInfo(String info) {

this.info = info;

for (Observer observer : observers) {

observer.update(this);

}

}

}

/**

* 观察者具体实现

*/

class ConcreteObserver implements Observer {

private String name;

public ConcreteObserver(String name) {

this.name = name;

}

public String getName() {

return name;

}

@Override

public void update(ObservedObject obj) {

System.out.println(name + "先生您好,您的最新消息更新如下:\n" + ((ConcreteObject)obj).getInfo());

}

}

/**

* 主类,用于测试

*/

public class Main {

public static void main(String[] args) {

// 创建被观察的对象

ConcreteObject observer = new ConcreteObject();

// 创建四个观察者对象

ConcreteObserver obja = new ConcreteObserver("张三丰");

ConcreteObserver objb = new ConcreteObserver("麻师娘");

ConcreteObserver objc = new ConcreteObserver("李小龙");

ConcreteObserver objd = new ConcreteObserver("太上老君");

// 将观察者加入被观察的对象列表

observer.add(obja);

observer.add(objb);

observer.add(objc);

observer.add(objd);

//更新被观察者的相关信息

observer.setInfo("今天天气晴朗,蓝天白云,适合外出,可以带上你们的情侣出门游玩哦!");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值