设计模式之观察者模式
观察者模式:所谓的观察者就是当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。观察者模式属于行为型模式。
注解:所有对象都可以是观察者,也可以是被观察者。
观察者模式的思维图如下:
被观察者接口
package 观察者模式; /** * * @author 博园学子 * 被观察者接口 */ public interface Observed { public void addObserver(Observer o);//添加观察者 public void removeObserver(Observer o);//移除观察者 public void notifyAllObserver();//通知所有观察者 }
微信公众号
package 观察者模式; import java.util.ArrayList; import java.util.List; /** * * @author 博园学子 * 被观察者实现类(微信公众号) */ public class WeChatPublicNumber implements Observed{ List<Observer> list=new ArrayList<>();//存放观察者(用户)的集合 public boolean state=false;//被观察者的状态 public boolean getState() { return state; } public void setState(boolean state) { this.state = state; } @Override public void addObserver(Observer o) { list.add(o); } @Override public void removeObserver(Observer o) { list.remove(o); } @Override public void notifyAllObserver() { if(this.getState()){ for(Observer o:list){ o.update(); } this.state=false; } } }
观察者接口
package 观察者模式; public interface Observer { public void update(); }
用户1
package 观察者模式; /** * * @author 博园学子 * 观察者类(用户) */ public class Customer1 implements Observer{ @Override public void update() { System.out.println("Customer1已收到公众号更新"); } }
用户2
package 观察者模式; /** * * @author 博园学子 * 观察者类(用户) */ public class Customer2 implements Observer{ @Override public void update() { System.out.println("Customer2已收到公众号更新"); } }
测试类
package 观察者模式; /** * * @author 博园学子 * 测试类 */ public class Test { public static void main(String[] args) { //实例化被观察者 WeChatPublicNumber observed=new WeChatPublicNumber(); //实例化用户1 Observer observer1=new Customer1(); //实例化用户2 Observer observer2=new Customer2(); //为被观察者添加观察者 observed.addObserver(observer1); observed.addObserver(observer2); //被观察者的状态改变 observed.setState(true); observed.notifyAllObserver(); } }
运行结果: