`
Notebookdong
  • 浏览: 122260 次
社区版块
存档分类
最新评论

java中的Observer模式

    博客分类:
  • java
阅读更多
import java.util.Observable;

public class DateSubject extends Observable {
	// 封装被观察的数据
	private int widthInfo;
	private int heightInfo;

	public int getWidthInfo() {
		return widthInfo;
	}

	public void setWidthInfo(int widthInfo) {
		this.widthInfo = widthInfo;
		// 数据改变后,setChanged()必须被调用,否则notifyObservers()方法会不起作用
		this.setChanged();
	}

	public void setHeightInfo(int heightInfo) {
		this.heightInfo = heightInfo;
		this.setChanged();
	}

	public int getHeightInfo() {
		return heightInfo;
	}
}

 

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class FrameSubject extends JFrame {
	private static final long serialVersionUID = 1010334549420828435L;
	JTextField jTextField1 = new JTextField("100");
	JTextField jTextField2 = new JTextField("100");
	JButton jbutton = new JButton("click");

	FrameSubject() {
		this.setLayout(new FlowLayout());
		this.setSize(100, 100);
		this.add(jTextField1);
		this.add(jTextField2);
		this.add(jbutton);
		jbutton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent paramActionEvent) {
				jButton1_actionPerformed(paramActionEvent);

			}
		});
	}

	// 因为无法使用多重继承,这儿就只能使用对象组合的方式来引入一个
	// java.util.Observerable对象了。
	DateSubject subject = new DateSubject();

	// 这个方法转发添加Observer消息到DateSubject。
	public void registerObserver(java.util.Observer o) {
		subject.addObserver(o);
	}

	// 数据改变,事件被触发后调用notifyObservers()来通知Observer。
	void jButton1_actionPerformed(ActionEvent e) {
		subject.setWidthInfo(Integer.parseInt(jTextField1.getText()));
		subject.setHeightInfo(Integer.parseInt(jTextField2.getText()));
		subject.notifyObservers();
	}
}

 

import java.awt.FlowLayout;
import java.util.Observable;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class FrameObserver extends JFrame implements java.util.Observer {
	/**
	 * 2013-3-28
	 * @author Administrator
	 */
	private static final long serialVersionUID = 1L;
	JLabel jLabel1 = new JLabel("1");
	JLabel jLabel2 = new JLabel("2");
	JLabel jLabel3 = new JLabel("3");
	JLabel jLabel4 = new JLabel("4");

	FrameObserver() {
		this.setLayout(new FlowLayout());
		this.setSize(100, 100);
		this.add(jLabel1);
		this.add(jLabel2);
		this.add(jLabel3);
		this.add(jLabel4);
	}

	// 观察的数据
	int widthInfo = 0;
	int heightInfo = 0;

	// 在update()方法中实现对数据的更新和其它必要的反应。
	@Override
	public void update(Observable o, Object arg) {
		DateSubject subject = (DateSubject) o;
		widthInfo = subject.getWidthInfo();
		heightInfo = subject.getHeightInfo();
		jLabel1.setText("The heightInfo from subject is:  ");
		jLabel3.setText(String.valueOf(heightInfo));
		jLabel2.setText("The widthInfo from subject is:  ");
		jLabel4.setText(String.valueOf(widthInfo));
	}
}

 

public class Test{
	public static void main(String[] args) {
		FrameSubject subject = new FrameSubject();
		FrameObserver observer = new FrameObserver();
		// 在Subject中注册Observer,将两者联系在一起
		subject.registerObserver(observer);
		subject.setVisible(true);
		observer.setVisible(true);
	}
}

 

分享到:
评论

相关推荐

    Observer模式

    Observer模式,也被称为“发布-订阅”模式,是软件设计模式中的行为模式之一。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Observer模式是实现...

    Observer设计模式实例

    在Observer模式中,主要有两个关键角色:Subject(主题)和Observer(观察者)。Subject维护了一个Observer的列表,并负责在状态变化时通知它们。Observer则关注Subject,当Subject状态变化时,Observer会收到通知并...

    详解Observer Pattern(观察者模式)在Java中的使用原理

    该示例是翻写一老外Observer Pattern的例子,本人觉得该示例是对该模式的非常精典的说明,于是花点功夫来翻写它,因为他的代码没有注释说明该模式的设计思想怎样体现在代码中去,所以,本人结合代码注释了关键代码的...

    OBserver模式设计实现

    标题中的"OBserver模式设计实现"是指探讨如何在实际编程中应用观察者模式,无论是用Java还是C++。Head First系列书籍是著名的编程学习资源,以易懂的方式解释复杂的设计模式。在描述中提到的"Head First模式设计用的...

    java设计模式之Observer参考.pdf

    这样,当用户在JSP页面上操作商品的名称或价格时,实际上就是在调用`Product`类中的`setName()`和`setPrice()`方法,进而触发Observer模式中的通知机制,使得观察者能够及时得知商品状态的变更。 总的来说,...

    Observer模式代码实现

    ### Observer模式代码实现 #### 观察者模式简介 观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动...

    JAVA23中设计模式

    ### JAVA23中设计模式详解 #### 一、概述 设计模式是在软件设计过程中解决常见问题的一套可复用的解决方案。《JAVA23中设计模式》是一份针对Java程序员的指南,旨在通过一系列示例和理论讲解,帮助读者理解和掌握...

    java设计模式之Observer[整理].pdf

    在这个场景中,我们将讨论如何在Java中应用Observer模式,特别是在电子商务系统中的应用。 Observer模式的核心思想是定义一个一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象的状态发生变化...

    Java设计模式之观察者模式(Observer模式)介绍

    观察者模式(Observer模式)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在Java中,这个模式是通过`java.util....

    Observer模式的应用

    请选用适当的设计模式,编写一个股票行情分析软件,随着时间的推移和股票价格的变动,实现各种指标的动态更新(要求至少实现一个股票的分时图和K线图:为降低编程工作量,K线图可以用开盘价、收盘价、最高价、最低价...

    Java的23种设计模式百度云下载链接.rar

    Java中的`Observer`和`Observable`接口就是观察者模式的实现。 23. **中介者模式**:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的...

    java与模式光盘源码

    《Java与模式》是阎宏博士撰写的一本经典IT著作,深入浅出地探讨了如何在Java编程中应用设计模式。这本书的光盘源码包含了书中提到的各种模式的实例代码,为读者提供了实践和理解设计模式的宝贵资源。在本文中,我们...

    Observer 模式

    在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了实现Observer模式的基础框架。主体类通常扩展`Observable`,并调用其`addObserver()`方法来注册新的观察者,`deleteObserver()`用于移除,而`...

    五种常用的Java设计模式

    下面将总结五种常用的Java设计模式,分别是单例模式、工厂模式、建造模式、_observer模式和迭代器模式。 单例模式 单例模式是一种创造型设计模式,主要目的是使内存中保持一个对象。单例模式可以保证在整个应用...

    Java 企业设计模式

    Java企业设计模式是软件开发领域中的重要组成部分,它是一套经过实践验证的解决方案,用于解决在Java环境中构建大型、复杂企业应用时常见的问题。这些模式是经验丰富的开发者们通过不断尝试和总结,形成的最佳实践,...

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

    java的设计模式 《设计模式-java语言中的应用.pdf》

    Java的`Observer`和`Observable`接口实现了观察者模式。 13. **责任链模式**:避免请求的发送者和接收者之间的耦合,将多个处理者组织成链,请求沿着链传递,直到被某个处理者处理。在Java中,异常处理机制某种程度...

    Java观察者模式代码全解析

    本文将深入解析Java中的观察者模式,并通过一个详细的代码示例来阐述其工作原理。 观察者模式的核心概念包括主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以是任何包含可变状态的类;观察者是对...

    23种java设计模式.pdf

    JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建模式是指在创建对象时...

    Java设计模式刘伟书本中模拟考试答案

    以上这些知识点是Java设计模式中非常重要的部分,掌握了这些概念和应用,对于提高软件设计和开发的质量与效率具有重要意义。在学习和应用这些模式时,需要结合具体的应用场景和需求进行灵活运用。

Global site tag (gtag.js) - Google Analytics