java设计模式之观察者模式
2017-11-28 11:23
561 查看
java设计模式参考文章:
Java设计模式实战,23种设计模式介绍以及在Java中的实现,Java设计模式, Java经典设计模式之五大创建型模式
## 定义 ##
## 代码示例 ##
在博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息。这是如何实现的? 是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者, 然后循环的把消息发给订阅者,这样就会显得更人性化了。这就是观察者模式,观察者模式有两个对象:博主,订阅者。 当读者在订阅时,会把读者信息放到一个队列里面去,方便在博客主布时循环这个对列并发送消息。
## 使用jdk实现观察者模式 ##
## 解析 ##
拉模型,拉的方式就是主题的数据更新后,不直接将数据推给客户端,而是先推送一个通知并提供对应的方法供客户端拉取数据。
推模型 ,Subject主动向观察者推送有关状态的详细信息, 推送的信息通常是目标对象的全部或部分数据. 观察者只能被动接收。
Java设计模式实战,23种设计模式介绍以及在Java中的实现,Java设计模式, Java经典设计模式之五大创建型模式
## 定义 ##
Observer模式是行为模式之一, 定义对象间的一种一对多的依赖关系,当一个对象状态发生改变时, 所有依赖它的对象都得到通知并被自动更新。
## 代码示例 ##
在博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息。这是如何实现的? 是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者, 然后循环的把消息发给订阅者,这样就会显得更人性化了。这就是观察者模式,观察者模式有两个对象:博主,订阅者。 当读者在订阅时,会把读者信息放到一个队列里面去,方便在博客主布时循环这个对列并发送消息。
/** * @author bwx * @date 2017/11/28 * 观察者抽象接口 */ public interface Observers { void update(String msg); } /** * @author bwx * @date 2017/11/28 * 博客观察者(订阅者) */ public class BlogObServer implements Observers { public void update(String msg) { System.out.println("观察者收到消息:" + msg); } } /** * @author bwx * @date 2017/11/28 * 订阅者的注册中心或者主题抽象类 */ public abstract class Subject { protected List<Observers> observers = new LinkedList<Observers>(); public void attach(Observers observer) { observers.add(observer); } public void detach(Observers observer) { observers.remove(observer); } protected abstract void notifyObservers(); } /** * @author bwx * @date 2017/11/28 * 订阅者的注册中心或者主题 */ public class BlogSubject extends Subject { protected void notifyObservers() { for (Observers observer : observers) { observer.update("已经发布博客"); } } } public class Main { public static void main(String[] args) { BlogSubject blogSubject = new BlogSubject(); blogSubject.attach(new BlogObServer()); System.out.println("发布博客"); blogSubject.notifyObservers(); } }
## 使用jdk实现观察者模式 ##
/** * @author bwx * @date 2017/11/28 * 博客对象 */ public class Blog { private String articleTitle; private String articleContent; public String getArticleTitle() { return articleTitle; } public void setArticleTitle(String articleTitle) { this.articleTitle = articleTitle; } public String getArticleContent() { return articleContent; } public void setArticleContent(String articleContent) { this.articleContent = articleContent; } } /** * @author bwx * @date 2017/11/28 */ public class BlogObServer implements Observer { /** * This method is called whenever the observed object is changed. An * application calls an <tt>Observable</tt> object's * <code>notifyObservers</code> method to have all the object's * observers notified of the change. * * @param o the observable object. * @param arg an argument passed to the <code>notifyObservers</code> */ public void update(Observable o, Object arg) { Blog blog = (Blog) arg; System.out.println("观察者收到blog内容消息:" + blog.getArticleContent()); System.out.println("观察者收到blog标题消息:" + blog.getArticleTitle()); } } /** * @author bwx * @date 2017/11/28 * 订阅者的注册中心或者主题 */ public class BlogSubject extends Observable { public void publishBlog(String articleTitle,String articleContent) { Blog blog = new Blog(); blog.setArticleTitle(articleTitle); blog.setArticleContent(articleContent); System.out.println("发布博客"); this.setChanged(); this.notifyObservers(blog); } } /** * @author bwx * @date 2017/11/28 * 使用jdk实现观察者模式 */ public class Main { public static void main(String[] args) { BlogSubject blogSubject = new BlogSubject(); blogSubject.addObserver(new BlogObServer()); blogSubject.publishBlog("blog标题", "blog内容"); } }
## 解析 ##
拉模型,拉的方式就是主题的数据更新后,不直接将数据推给客户端,而是先推送一个通知并提供对应的方法供客户端拉取数据。
推模型 ,Subject主动向观察者推送有关状态的详细信息, 推送的信息通常是目标对象的全部或部分数据. 观察者只能被动接收。
相关文章推荐
- 我遇到的java笔试题--观察者设计模式
- Java设计模式——观察者模式
- java设计模式 ——观察者模式
- 学习、探究Java设计模式——观察者模式
- 设计模式应用与发展之观察者模式(java)
- "观察者模式"-之Java,Android面试必问设计模式(8/9)
- 设计模式 - 观察者模式(Observer Pattern) Java内置 使用方法
- JAVA设计模式之观察者模式
- java设计模式15——观察者模式(Observer)
- java设计模式--观察者模式(Observer)
- 设计模式---观察者模式(Observer Pattern with java)
- 【行为型模式】观察者模式(Observer)之23种java设计模式
- Java设计模式—观察者模式
- java设计模式-观察者模式
- JAVA设计模式之观察者模式
- Java设计模式(三)——观察者模式和监听器
- Java中常见的设计模式之观察者模式
- GOF23设计模式之观察者模式的理解与实现2(使用java自带的观察者类和接口)
- 23种java设计模式之观察者模式
- java与设计模式之观察者模式