Java设计模式菜鸟系列(二)观察者模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39755577

观察者(Observer)模式定义:在对象之间定义了一对多的依赖关系,这样一来,当一个对象改变状态时,依赖它的对象都会收到通知并自动跟新。Java已经提供了对观察者Observer模式的默认实现,
Java对观察者模式的支持主要体现在Observable类和Observer接口。先看uml模型图:

一、UML模型图

二、代码实现

/** 示例:咱们去菜市场买菜
 *
 * 小商贩--主题
 */
class Food extends Observable {
	/** 菜名 */
	private String name;
	/** 菜价 */
	private float price;

	public Food(String name, float price) {
		this.name = name;
		this.price = price;
	}

	public String getName() {
		return name;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
		/**
		 * 设置菜价的状态已经被改变
		 */
		this.setChanged();
		/**
		 * 通知【所有】正在看菜(已经注册了)的顾客,然后回调Observer的update方法进行更新
		 *
		 * 这里可以体现对象的一对多:一个小商贩一旦更新价格(即一个对象改变状态),便会自动通知所有的顾客(依赖它的对象都会收到通知)
		 * 并自动update
		 */
		this.notifyObservers(price);
	}

}

/**
 * 顾客 --观察者
 */
class Customer implements Observer {
	private String name;

	public Customer(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	@Override
	public void update(Observable o, Object arg) {
		if (o instanceof Food && arg instanceof Float) {
			Food food = (Food) o;
			float price = (Float) arg;
			System.out.println("您好:" + this.name + " ," + food.getName()
					+ "的价格已经发生改变,现在的价格为:" + price + "元/斤");
		}
	}

}

/**
 * 客户端测试类
 *
 * @author Leo
 */
public class Test {
	public static void main(String[] args) {
		Food food = new Food("土豆", 1.0f);
		Customer zhangsan = new Customer("张三");
		Customer lisi = new Customer("李四");
		/**
		 * 添加顾客
		 */
		food.addObserver(zhangsan);
		food.addObserver(lisi);
		/**
		 * 更新价格
		 */
		food.setPrice(1.5f);
	}
}

三、应用场景

GUI框架、气象观察等

四、小结

在通知所有观察者之前一定要调用 setChanged()方法来设置被观察者的状态已经被改变,这样notifyObservers()才会回调Observer的update方法进行更新。

以上内容如果有不同的见解或疏忽的地方,还请大家提出宝贵的建议或意见。

最后大家可以试着将下面的uml模型进行具体的代码实现,如图:附源码

时间: 2024-12-12 14:58:26

Java设计模式菜鸟系列(二)观察者模式建模与实现的相关文章

Java设计模式菜鸟系列(二十一)享元模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40021651 享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象.主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销.在某种程度上,你可以把单例看成是享元的一种特例. 一.uml建模: 二.代码实现 /** * 享元模式(Flyweight):运用共享的技术有效地支持大量细粒度的对象. * * 主要目的是实现对象的共享,即共享池,当系统中对象

Java设计模式菜鸟系列(二十二)中介者模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40027109 中介者模式(Mediator):主要用来降低类与类之间的耦合的,因为如果类与类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改. 一.uml建模: 二.代码实现 /** * 中介者模式(Mediator):主要用来降低类与类之间的耦合的,因为如果类与类之间有依赖关系的话, * * 不利于功能的拓展和维护,因为只要修改一个对象,其它

Java设计模式菜鸟系列(二十三)访问者模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40028509 访问者模式(Visitor):把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化.访问者模式适用于数据结构相对稳定而算法又容易变化的系统.访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者:而它的缺点就是增加新的数据结构很困难. 一.uml建模: 二.代码实现 /** * 访问者模式(Visitor):把数据结构和作用于结构上的操作解耦合,使

Java设计模式菜鸟系列(二十)解释器模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40019829 解释器模式(Interpreter):它定义了对象与对象之间进行某种操作之后会得到什么值.一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄. 一.uml建模: 二.代码实现 /** * 解释器模式(Interpreter):它定义了对象与对象之间进行某种操作之后会得到什么值. * * 一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄. * * 示例:

Java设计模式菜鸟系列(六)单例模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403 单例模式(Singleton):是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.好处主要有:1.某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销.2.省去了new操作符,降低了系统内存的使用频率,减轻GC压力. 单例模式主要有两种实现方式:1.懒汉式:2.饿汉式 一.uml建模 二.代码实现: 1.懒汉式 /**

Java设计模式菜鸟系列(八)适配器模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805069 适配器模式(Adapter):将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题. 主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式. 一.类的适配器模式 1.uml建模: 2.代码实现 /** * 示例(一):类的适配器模式 * * 原类拥有一个待适配的方法originMethod */ class Origin

Java设计模式菜鸟系列总结及博客全目录

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40031567 今天来对这23种设计模式做个总结.咱使用设计模式的目的是为了可重用代码.让代码更容易被他人理解.保证代码可靠性,当然设计模式并不是万能的,项目中的实际问题还有具体分析.咱不能为了使用设计模式而使用,而是在分析问题的过程中,想到使用某种设计模式能达到咱需要的效果,而且比不使用设计模式更有优势,那么咱该考虑使用设计模式了. 一.设计模式的一般分类 创建型(Creator)模式(

Java设计模式菜鸟系列(一)策略模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39721563 今天开始咱们来谈谈Java设计模式.这里会结合uml图形来讲解,有对uml建模不熟的可以参考我的另一篇博文uml建模. 首先,个人觉得模式的设计就是一个将变化的东西和不变(稳定)的东西分离的过程.咱们的应用中可能有很多需要改变的地方,而模式要做的就是把它们"抽取"出来并进行"封装"和"实现",因此更多的时候咱们是面向接口编程

Java设计模式菜鸟系列(两)建模与观察者模式的实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39755577 观察者(Observer)模式定义:在对象之间定义了一对多的依赖关系,这样一来.当一个对象改变状态时,依赖它的对象都会收到通知并自己主动跟新.Java已经提供了对观察者Observer模式的默认实现, Java对观察者模式的支持主要体如今Observable类和Observer接口. 先看uml模型图: 一.UML模型图 watermark/2/text/aHR0cDovL