Java设计模式 观察者模式

观察者模式

使用场景: 控屏软件 : 比如 , 红蜘蛛 , 等

在这里插入图片描述

通知者抽象层

public abstract class AbstractSubject {
	
	protected List<AbstractObserver> observers = new ArrayList<>();
	
	public boolean addObserver(AbstractObserver observer) 
    { return observers.add(observer); }
	
	public boolean delObserver(AbstractObserver observer) 
    { return observers.remove(observer); }

	public abstract void notice();

}

通知者具体实现类

public class AbstractSubjectImpl extends AbstractSubject {

	private String context;

	public String getContext() {
		return context;
	}

	public void setContext(String context) {
		this.context = context;
		this.notice();
	}

	@Override
	public void notice() {
		for (AbstractObserver o : observers) {
			o.update(this);
		}
	}

}

观察者抽象层

public interface AbstractObserver {

	public void update(AbstractSubject subject);
	
}

观察者具体实现

public class AbstractObserverImpl implements AbstractObserver {

	private String context;

	public String getContext() {
		return context;
	}

	public void setContext(String context) {
		this.context = context;
	}

	@Override
	public void update(AbstractSubject subject) {
		if (subject instanceof AbstractSubjectImpl) {
			AbstractSubjectImpl subjectImpl = (AbstractSubjectImpl) subject;
			String context = subjectImpl.getContext();
			this.context = context;
		}
	}

	@Override
	public String toString() {
		return "AbstractObserverImpl [context=" + context + "]";
	}

}

使用 JDK 自带的观察者模式

Observable : 通知者

方法名方法描述
protected synchronized void setChanged()在通知观察者对象前调用
public void notifyObservers(Object arg)通知所有观察者将新值, 通过方法入口出入

Observer : 观察者

方法名方法描述
void update(Observable o, Object arg)观察者获取通知者的值(o : 通知者对象, arg : 新值)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值