Open zgq105 opened 5 years ago
观察者模式指在一对多的关系中,当一个对象的值发生改变时,会通知依赖它的所有对象,属于行为型设计模式。它的作用主要解决一个对象状态改变时,及时通知其他对象的问题。
以微信公众号例子实现简单的观察者模式,具体代码如下: //创建主体角色:即被观察的对象
/** * Created by zgq on 2019/6/3 20:12 * 主体对象:被观察的对象 */ public class WxgzhSubject { private List<WxObserver> mWxObservers = new ArrayList<>(); public boolean subscribe(WxObserver wxObserver) { return mWxObservers.add(wxObserver); } public boolean unsubscribe(WxObserver wxObserver) { return mWxObservers.remove(wxObserver); } /** * 通知所有观察者对象 * @param content */ public void notice(String content) { for (WxObserver wxObserver : mWxObservers) { wxObserver.notice(content); } } }
//创建观察者角色-抽象接口
/** * Created by zgq on 2019/6/3 20:14 */ public interface WxObserver { void notice(String content); }
//创建具体的观察者实现类
/** * Created by zgq on 2019/6/3 20:15 */ public class WxUser implements WxObserver { private String uid; private String name; public WxUser(String name) { this.name = name; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void notice(String content) { System.out.println(this.name + "==="+content); } }
//使用观察者模式
/** * Created by zgq on 2019/6/3 20:28 */ public class ObserverModeTest { public static void test(){ //创建主体对象 WxgzhSubject wxgzhSubject=new WxgzhSubject(); //创建观察者对象 WxUser wxUser1=new WxUser("张三"); WxUser wxUser2=new WxUser("李四"); WxUser wxUser3=new WxUser("王五"); //订阅-建立关联 wxgzhSubject.subscribe(wxUser1); wxgzhSubject.subscribe(wxUser2); wxgzhSubject.subscribe(wxUser3); //通知 wxgzhSubject.notice("公众号主页更新了"); System.out.println("======"); //取消订阅 wxgzhSubject.unsubscribe(wxUser1); wxgzhSubject.notice("有新消息"); } }
在JDK中,java.util.Observable和java.util.Observer,分别代表观察者模式中的Subject和Observer。在Android中,View#OnClickListener和EventBus框架中使用了观察这模式。
观察者模式主要解决一对多的关系,当一个对象的状态发生改变时,如何通知关联的对象问题。在观察者模式中,需要了解主体对象(被观察的对象)和观察者对象;主体对象是指观察者需要观察的对象,主体提供订阅、取消订阅和通知等功能;而观察者对象指需要监听某个主体对象变更的对象。 优点:
缺点:
1. 什么是观察者模式?有什么作用?
观察者模式指在一对多的关系中,当一个对象的值发生改变时,会通知依赖它的所有对象,属于行为型设计模式。它的作用主要解决一个对象状态改变时,及时通知其他对象的问题。
2. 如何实现?
以微信公众号例子实现简单的观察者模式,具体代码如下: //创建主体角色:即被观察的对象
//创建观察者角色-抽象接口
//创建具体的观察者实现类
//使用观察者模式
3. JDK或Android的应用举例
在JDK中,java.util.Observable和java.util.Observer,分别代表观察者模式中的Subject和Observer。在Android中,View#OnClickListener和EventBus框架中使用了观察这模式。
4. 小结
观察者模式主要解决一对多的关系,当一个对象的状态发生改变时,如何通知关联的对象问题。在观察者模式中,需要了解主体对象(被观察的对象)和观察者对象;主体对象是指观察者需要观察的对象,主体提供订阅、取消订阅和通知等功能;而观察者对象指需要监听某个主体对象变更的对象。 优点:
缺点: