设计模式笔记——Observer

Observer Pattern 观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。主题对象发生状态变化时,会通知所有观察着,使它们能够更新自己。

 

当一个对象发生改变时,要同时改变其他对象,就用观察着模式


package observater.pattern;

public class ObserverPattern {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		ConcreteSubject subject=new ConcreteSubject();
		
		ConcreteObserver observer1=new ConcreteObserver("OBSERVER1",subject);
		ConcreteObserver observer2=new ConcreteObserver("OBSERVER2",subject);
		ConcreteObserver observer3=new ConcreteObserver("OBSERVER3",subject);
	
		subject.Attach(observer1);
		subject.Attach(observer2);
		subject.Attach(observer3);
		
		//subject.Detach(observer2);
		
		subject.setSubjectState("State1");
		subject.Notify();
		
		subject.setSubjectState("State2");
		subject.Notify();
		
	}

}

package observater.pattern;

public interface Observer {

	public void update();

}

package observater.pattern;

public class ConcreteObserver implements Observer {

	private String name;
	private String observerState;
	private ConcreteSubject subject; 
	
	public ConcreteObserver(String name,ConcreteSubject subject){
		this.name=name;
		this.setSubject(subject);
	}

	@Override
	public void update() {
		// TODO Auto-generated method stub
		this.observerState=subject.getSubjectState();
		System.out.println(name+"‘s state has changed to "+observerState);
	}


	public void setSubject(ConcreteSubject subject) {
		this.subject = subject;
	}

	public ConcreteSubject getSubject() {
		return subject;
	}

}

package observater.pattern;

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

public class Subject {
	
	private List<Observer> observers=new ArrayList<Observer>();
	
	public void Attach(Observer observer){
		observers.add(observer);
	}
	
	public void Detach(Observer observer){
		observers.remove(observer);
	}
	
	public void Notify(){
		for(Observer o:observers){
			o.update();
		}
	}

}

package observater.pattern;

public class ConcreteSubject extends Subject {

	private String subjectState;

	public void setSubjectState(String subjectState) {
		this.subjectState = subjectState;
	}

	public String getSubjectState() {
		return subjectState;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值