zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【设计模式系列】--观察者模式

模式设计模式 -- 系列 观察者
2023-09-27 14:29:31 时间
在前面的博文中,小编介绍设计模式中的撩妹模式,不知道小伙伴们有没有从中get到技巧呢?今天这篇博文,咱们继续来学习设计模式的相关知识,今天小编向大家介绍的模式是观察者模式,还请小伙伴多多指教,小编会从什么是原型观察者模式、观察者模式的结构图、观察者模式的demo以及观察者模式的特点和应用场景等方面一一进行介绍,希望对有需要的小伙伴有帮助。
如果这个时候,我们设置了名字,我们就需要通知一下,给相应的set方法加上通知和改变的方法,代码如下所示:

import java.util.Observable;


有了被观察者,我们还需要一个观察者,新建类MyObServer,编写相关代码,如下所示:

import java.util.Observable;

import java.util.Observer;


这个博文是被博主来进行发表的,so我们需要创建一个类BlogUser,编写相关代码,如下所示:

package com.shejimoshi.news;

import java.util.Observable;

public class BlogUser extends Observable {

 public void publishBlog(String articleTitle,String articleContent) {

 System.out.println("博主:发表新文章,文章标题:" + articleTitle + ",文章内容:" + articleContent);

 this.setChanged();

 this.notifyObservers();

被观察者ok了,我们来新建一个观察者的类,编写相关的代码部分,如下所示:

package com.shejimoshi.news;

public class MainClass {

 public static void main(String[] args) {

 BlogUser user = new BlogUser();

 user.addObserver(new MyObServer());

 user.publishBlog("博客上线啦","欢迎大家来访问" );

运行,如下所示:

我们还可以把Article进行封装,如下所示:

package com.shejimoshi.news;

import java.util.Observable;

public class BlogUser extends Observable {

 public void publishBlog(String articleTitle,String articleContent) {

 Article art = new Article();

 art.setArticleTitel(articleTitle);

 art.setArticleContent(articleContent);

 System.out.println("博主:发表新文章,文章标题:" + articleTitle + ",文章内容:" + articleContent);

 this.setChanged();

 this.notifyObservers(art);

编写MyObeServer的代码部分,如下所示:

package com.shejimoshi.news;

import java.util.Observable;

import java.util.Observer;

public class MyObServer implements Observer {

 @Override

 public void update(Observable o, Object arg) {

 Article art = (Article)arg;

 System.out.println("博主发表了新的文章,快去看吧");

 System.out.println("博客标题为:"+art.getArticleTitel());

 System.out.println("博客标题为:"+art.getArticleContent());


运行,如下所示:



    观察者模式的优缺点

     优点:
a、当两个对象之间送耦合,他们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计,让主题和观察者之间送耦合。主题所知道只是一个具体的观察者列表,每一个具体观察者都符合一个抽象观察者的接口。主题并不认识任何一个具体的观察者,它只知道他们都有一个共同的接口。
b、观察者模式支持“广播通信”。主题会向所有的观察者发出通知。
c、观察者模式符合“开闭原则”的要求。
    缺点:
a、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
b、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进  行循环调用,可能导致系统崩溃。
c、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
     小编寄语:该博文,小编主要介绍了观察者模式,从什么是观察者模式、观察者模式的结构图、观察者模式的场景、优缺点以及观察者模式Demo,希望可以帮助有需要的小伙伴,请小伙伴们多多指教`(*∩_∩*)′,观察者模式是一种通知变化的模式,一般认为只在对象发生变化感兴趣的场合有用。主题对象知道有观察者存在,设置会维护观察者的一个队列;而从广义的角度看,观察者模式是中传递变化数据的模式,需要查看对象属性时就会使用的一种模式,主题对象不知道观察者的存在,更像是围观者。需要知道主题对象的状态,所以即使在主题对象没有发生改变的时候,观察者也可能会去访问主题对象。换句话说广义观察者模式,是在不同的对象之间传递数据的一种模式。


设计模式之观察者模式 Spring使用观察者模式我在很久之前就使用过,但是并不清楚为什么要这样写,学了观察者模式以后,写起来变得通透多了。
设计模式-15-观察者模式 观察者模式(Observer Pattern)定义了一种对象间一对多的依赖关系,一个主题目标对象能被多个观察者对象同时监听,使得每当主题目标对象状态变化时,所有依赖它的对象都会得到通知并被自动更新,属于行为型设计模式。