最简单的观察者模式

主题角色:

public interface Subject {
	void attach(Observe observe);
	void remove(Observe observe);
	void notifyObserver(String mess);
}

主题角色可以是抽象类或者接口来实现,它定义了一组用来操作观察者的方法。

观察者 :

public interface Observe {
	void Update(String message);
}

真实观察者角色:


public class ConcreteObserver implements Observe {
	private String name;
    private String message;
    
    public ConcreteObserver(String name) {
		// TODO Auto-generated constructor stub
    	this.name = name;
	}
    
	@Override
	public void Update(String message) {
		// TODO Auto-generated method stub
		this.message = message;
		System.out.println("观察者"+name+"收到消息:"+message);
	}
}

真实主题角色:

import java.util.ArrayList;
import java.util.List;

public  class ConcreteSubject implements Subject {
	
	private List<Observe>  observes ;
	
	public ConcreteSubject() {
		// TODO Auto-generated constructor stub
		this.observes = new ArrayList<>();
	}

	@Override
	public void attach(Observe observe) {
		// TODO Auto-generated method stub
		observes.add(observe);
	}

	@Override
	public void remove(Observe observe) {
		// TODO Auto-generated method stub
		observes.remove(observe);
		
	}

	@Override
	public void notifyObserver(String message) {
		System.out.println("被观察者发出消息。。。");
		// TODO Auto-generated method stub
		for (Observe observe : observes) {
			observe.Update(message);
		}
		
	}

}

测试类:


public class ClientTest {
	
	public static void main(String[] args) {
		
		Observe observe1 = new ConcreteObserver("观察者1");
		Observe observe2 = new ConcreteObserver("观察者2");
		Subject subject =new ConcreteSubject();
		subject.attach(observe1);
		subject.attach(observe2);
		subject.notifyObserver("hei");
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_24532581/article/details/87861912