UML图
主题接口
package designpattern.observer;
/**
* @基本功能:主题接口
* @program:summary
* @author:peicc
* @create:2019-09-03 16:50:47
**/
public interface Subject {
//添加观察者
void attach(Observer obj);
//删除观察者
void detach(Observer obj);
//通知观察者
void notifyObserver();
}
观察者接口
package designpattern.observer;
/**
* @基本功能:观察者
* @program:summary
* @author:peicc
* @create:2019-09-03 16:52:11
**/
public interface Observer {
//当主题状态改变时,更新通知
void update(int state);
}
主题实现类
package designpattern.observer;
import java.util.ArrayList;
import java.util.List;
/**
* @基本功能:具体主题
* @program:summary
* @author:peicc
* @create:2019-09-03 16:56:58
**/
public class ConcreteSubject implements Subject {
//存放观察者
private List<Observer> observers=new ArrayList<>();
//被观察的状态
private int state;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
//注册观察者
@Override
public void attach(Observer obj) {
observers.add(obj);
}
//移除观察者
@Override
public void detach(Observer obj) {
if(observers.contains(obj)){
observers.remove(obj);
}
}
@Override
public void notifyObserver() {
for (Observer observer:observers) {
observer.update(state);
}
}
}
观察者实现类
package designpattern.observer;
/**
* @基本功能:具体观察者
* @program:summary
* @author:peicc
* @create:2019-09-03 17:01:19
**/
public class ConcreteObserver implements Observer {
//观察者名字
private String name;
//订阅者状态
private int state;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(int state) {
this.state=state;
System.out.println(name+"状态更新为:"+state);
}
}
客户端
package designpattern.observer;
/**
* @基本功能:
* @program:summary
* @author:peicc
* @create:2019-09-03 17:05:31
**/
public class Client {
public static void main(String[] args) {
ConcreteSubject subject=new ConcreteSubject();
subject.attach(new ConcreteObserver("张三"));
subject.attach(new ConcreteObserver("李四"));
subject.setState(10);
subject.notifyObserver();
subject.setState(20);
subject.notifyObserver();
}
}