观察者模式,触发联动

什么是观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象再状态发生改变时,会通知所有的观察者对象,使他们能够自动更新自己。
也被称作,模式-视图模式,源-监听器模式,从属模式

UML图

图片来自《大话设计模式》
观察者模式,触发联动_第1张图片
优点:
1、低耦合,Subject类和Observer类都依赖抽象
2、实现了动态联动
3、广播通信
缺点:
1、可能会造成无谓的操作
2、要防止循环观察,避免程序崩溃

使用场景

当一个对象的改变的同时需要改变其他对象时

小练习

客户购买基金,当基金发生改变时,通知客户。
观察者模式,触发联动_第2张图片
FundationAbstract类

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


public abstract class FundationAbstract {
	private List<Observer> lists=new ArrayList<Observer>();
	public void attach(Observer observer){
		lists.add(observer);
	}
	public void detach(Observer observer){
		lists.remove(observer);
	}
	public void notifyy(String state){
		for(Observer observer : lists){
			observer.statement=state;
			observer.update();
		}
	}
}

Fundation类

ublic class Fundation extends FundationAbstract{
	
	
}


public abstract class Observer {
	private String name;
	public String statement;
	
	public Observer(String name) {
		this.name = name;
	}
	public void buyStock(FundationAbstract fundationAbstract){
		fundationAbstract.attach(this);
	}
	public void sellStock(FundationAbstract fundationAbstract){
		fundationAbstract.detach(this);
	}
	public void update(){
		System.out.println(name+""+statement);
	}
}

Observer类

public abstract class Observer {
	private String name;
	public String statement;
	
	public Observer(String name) {
		this.name = name;
	}
	public void buyStock(FundationAbstract fundationAbstract){
		fundationAbstract.attach(this);
	}
	public void sellStock(FundationAbstract fundationAbstract){
		fundationAbstract.detach(this);
	}
	public void update(){
		System.out.println(name+""+statement);
	}
}

Investor类

public class Investor extends Observer{

	public Investor(String name) {
		super(name);
		
	}
	
}

你可能感兴趣的:(#,行为型模式,观察者模式)