栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式-行为型模式-Observer 观察者模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式-行为型模式-Observer 观察者模式

设计模式-行为型模式-Observer 观察者模式 1.简介

软件程序之间的解耦,减少相互之间的依赖关系,但是模块之间又是需要协同工作的;

观察者模式使得一个对象的状态发生改变的时候,已经预约的其他对象可以看到这一个改变;

很多事基于多态来实现;

2.角色

  • Subject :主题接口,通知观察者使用这个attach 方法注册, detach 注销 ,notify() 提示变更
  • ConcreteSubject:具体主题,Subject 接口的具体实现,实现观察者在链表的注册和注销,状态改变
  • Observer:观察者,当状态变更 需要做什么事情
  • ConcreteObserver:具体观察者,实现 Observer 的状态变更实现
3.场景

写个例子

设计一个钱包到账,支付宝,银行划款;

3.1.被观察者
interface Subject {
	void attach(Observer obsercer);

	void detach(Observer obsercer);

	void notifyObserver();
}

class Wallet implements Subject {
	public boolean moneyState = false;

	List observers = new ArrayList<>();

	public boolean isMoneyState() {
		return moneyState;
	}

	public void setMoneyState(boolean moneyState) {
		this.moneyState = moneyState;
		System.out.println("钱包钱到账");
		notifyObserver();
	}

	@Override
	public void attach(Observer obsercer) {
		observers.add(obsercer);
	}

	@Override
	public void detach(Observer obsercer) {
		observers.remove(obsercer);
	}

	@Override
	public void notifyObserver() {
		for (Observer observer : observers) {
			observer.updateMoney();
		}
	}

}

3.2 观察者
interface Observer {

    void updateMoney();
}


class BankObserver implements Observer {

   @Override
   public void updateMoney() {
      System.out.println("还银行钱");
   }
}

class AliPayObserver implements Observer {

   @Override
   public void updateMoney() {
      System.out.println("还花呗钱");
   }
}
3.3 测试
	public static void main(String[] args) {
		Wallet wallet = new Wallet();
		wallet.attach(new BankObserver());
		wallet.attach(new AliPayObserver());
		wallet.setMoneyState(true);
	}

//效果是
Connected to the target VM, address: '127.0.0.1:62672', transport: 'socket'
钱包钱到账
还银行钱
还花呗钱
3.4 总结

根据这个模式有点像 责任链模式,下面来总结一下那些异同点:

相同点:都是先把观察者和处理器 添加到一个业务链表,在根据业务来做每个观察者和处理器链的遍历;

不同点:1. 责任链有一个先进后出的过程,观察者没有这个过程 ;2. 责任链可以根据处理器链路来中断后面的链路;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926896.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号