Swing中惯用模式之观察者

作者: LinkedIn | 来源:发表于2017-04-05 11:10 被阅读0次

#定义

观察者模式又叫 发布-订阅 模式,定义的两个对象之间是一种一对多的强依赖关系,当一个对象的状态发生改变,所有依赖它的对象

# 关键角色:

1.主题(Subject)

  抽象主题以及具体的主题

2.观察者(Observer)

  抽象观察者以及具体观察者

Swing中惯用模式之观察者

##抽象理解:我们订阅简书中喜欢的栏目,一旦这个栏目有通知,我们订阅用户会收到通知,我们作为具体观察者 而订阅栏目作为具体主题

swing的按钮监听,通过事件委托机制,进行分发,来处理不同的事件,下面举一个例子

```

package org2.main.swing;

import javax.swing.*;

/**

* Created by Administrator on 2017/4/5

* swing驱动事件

*/

public class MainFrame {

//定义个容器变量

JFrame f = null;

//定义个按钮变量

JButton btn = null;

public MainFrame() {

//创建容器

f = new JFrame( "事件模型" );

//创建按钮

btn = new JButton( "按钮" );

//把按钮添加到容器中

f.add( btn );

//设置容器大小

f.setSize( 300, 200 );

//把容器设置为 可见

f.setVisible( true );

//给按钮添加事件处理

//在btn上注册一个监听器

//(btn其实就是具体的主题对象)

//(而监听器就是具体的观察者)

//当点击按钮时(其实也就是主题对象发生了改变),就会触发监听器事件(观察者更新了)

btn.addActionListener( new MyListener() );

}

//main方法

public static void main( String[] args ) {

new MainFrame();

}

}

```

下面是事件具体处理

```

package org2.main.swing;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

/**

* Created by Administrator on 2017/4/5

* 定义一个监听器(具体观察者)

*/

public class MyListener implements ActionListener {

//该方法类似于观察中的update方法

@Override

public void actionPerformed( ActionEvent e ) {

System.out.println( "按钮被点击,执行一些业务逻辑操作" );

}

}

```

#总结

  总的来说,观察者模式所做的工作其实就是在解除耦合。让耦合双方都依赖抽象,

而不是具体。从而使得各自的变化都不影响其他一方。这也符合了依赖倒置原则。

#使用原则

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

2.一个对象不知道它的改变会影响多少个类的改变。

3.当有一个抽象模型有两个方面,一面依赖另一面。这时观察者模式可以很好地

将两者封装在独立的对象使它们各自独立改变和复用。

最后:重写组件时可能运用到观察者模式,在数据处理,数据更新,通知其他消息组件时,都可以运用到!

#缺点

观察者设计模式中需要每个观察者重写通知方法,但是实际运用中,不可能能每个观察者都有通知方法,那么怎么解决这个问题呢,那就是运用消息队列来处理,拥有消息通知方法的观察者发布消息到队列中,实际主题只需要设计响应的方法从消息队列中取出消息数据即可!提供实际类

参考

java.util.concurrent.BlockingQueue;

java.util.concurrent.LinkedBlockingQueue;

相关文章

  • Swing中惯用模式之观察者

    #定义 观察者模式又叫 发布-订阅 模式,定义的两个对象之间是一种一对多的强依赖关系,当一个对象的状态发生改变,所...

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • 设计模式 观察者模式

    起因:在看架构设计的时候,有这样的一句话“观察者模式(Observer pattern)被用于 Swing 和很多...

  • 行为型模式:观察者模式

    行为型模式:观察者模式 十一大行为型模式之七:观察者模式。 简介 姓名 :观察者模式英文名 :Observer P...

  • RxJava2

    工程导入 Observable:在观察者模式中称为“被观察者”;Observer:观察者模式中的“观察者”,可接收...

  • 《PHP设计模式大全》系列分享专栏

    php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页 介绍php设计模式中的工厂模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

网友评论

    本文标题:Swing中惯用模式之观察者

    本文链接:https://www.haomeiwen.com/subject/lbptattx.html