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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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


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

先看uml模型图:


一、UML模型图

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

二、代码实现

/** 演示样例:咱们去菜市场买菜
 * 
 * 小商贩--主题
 */
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 + "元/斤");
		}
	}

}

/**
 * client測试类
 * 
 * @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模型进行详细的代码实现,如图:附源代码

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


版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116979.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 我的Java设计模式-原型模式

    我的Java设计模式-原型模式

    2022年3月7日
    41
  • 十三、外观模式—— 简化接口 #和设计模式一起旅行#

    我不想成为上帝或英雄,只想成为一棵树,为岁月而生长,不伤害任何人。 ——米沃什故事背景在英国体验了康桥的魅力,我挥一挥衣袖,不带走一片云彩,但是 英国的天空没有留下我的痕迹,但我曾去过。哈哈!从英国到法国,在浪漫的巴黎,我和设计模式MM感受到这个城市别样的风景,很是吸引人,我们决定在这里待一段时间在走。于是去政府部门办理一些手续,本来以为会花费很多时间的,因为之前办…

    2022年2月27日
    41
  • 设计模式、框架、架构、平台的区别「建议收藏」

    设计模式、框架、架构、平台的区别「建议收藏」区分什么是架构、框架、模式和平台,一直都感觉这几个词过于抽象和模糊,今天大家来说说到底什么是架构、框架、模式和平台? 收集了的一些来自网上各自的定义和区分如下: 设计模式 1、设计模式为什么要先说设计模式?因为设计模式在这些概念中是最基本的,而且也比较简单。那么什么是设计模式呢?说的直白点,设计模式就是告诉你针对特定问题如何组织类、对象和接口之间的关系,是前人总结的经验

    2022年10月10日
    1
  • 设计模式之职责链模式

    相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断。一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新

    2021年12月28日
    59
  • 设计模式之6大原则(6)开闭原则

    设计模式之6大原则(6)开闭原则

    2021年11月15日
    62
  • 抽象工厂设计模式例题_什么是抽象工厂模式

    抽象工厂设计模式例题_什么是抽象工厂模式定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别       抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽

    2025年7月3日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号