用户注册成功,系统发送短信和邮件给用户。观察者模式,用java实现
时间: 2024-04-30 10:18:54 浏览: 14
观察者模式是一种设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象的状态发生改变时,会通知所有的观察者对象,使它们能够自动更新自己。
下面是一个用Java实现的用户注册成功后发送短信和邮件的示例:
```java
import java.util.ArrayList;
import java.util.List;
// 主题接口
interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
// 用户注册主题
class UserRegisterSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
private String username;
public void setUsername(String username) {
this.username = username;
notifyObservers();
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(username);
}
}
}
// 观察者接口
interface Observer {
void update(String username);
}
// 短信观察者
class SMSObserver implements Observer {
@Override
public void update(String username) {
System.out.println("发送短信给用户:" + username);
}
}
// 邮件观察者
class EmailObserver implements Observer {
@Override
public void update(String username) {
System.out.println("发送邮件给用户:" + username);
}
}
// 测试类
public class ObserverPatternDemo {
public static void main(String[] args) {
UserRegisterSubject subject = new UserRegisterSubject();
Observer smsObserver = new SMSObserver();
Observer emailObserver = new EmailObserver();
subject.registerObserver(smsObserver);
subject.registerObserver(emailObserver);
subject.setUsername("Alice");
}
}
```
在这个示例中,我们定义了一个主题接口 `Subject`,包含了注册观察者、移除观察者和通知观察者的方法,用户注册主题 `UserRegisterSubject` 实现了这个接口,并在用户注册成功后调用了 `notifyObservers` 方法通知所有观察者。
观察者接口 `Observer` 定义了一个 `update` 方法,在主题状态发生改变时会被调用。
短信观察者 `SMSObserver` 和邮件观察者 `EmailObserver` 分别实现了观察者接口,并在状态发生改变时输出相应的信息。
在测试类 `ObserverPatternDemo` 中,我们创建了一个用户注册主题对象 `subject`,并创建了短信观察者和邮件观察者对象,并将它们注册到主题对象中。当用户注册成功后,主题对象会通知所有观察者,短信观察者和邮件观察者会分别输出相应的信息。