设计模式之Observer

机器人路径规划:基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的机器人路径规划(提供MATLAB代码) 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的重要步骤,路径规划是指规划机器人从起点位置出发,无碰撞、安全到达指定目标位置的最优路径。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Observer(观察者)模式是比较常用的一个模式,尤其在界面设计中应用广泛,而本站所关注的是Java在电子商务系统中应用,因此想从电子商务实例中分析Observer的应用.   虽然网上商店形式多样,每个站点有自己的特色,但也有其一般的共性,单就"商品的变化,以便及时通知订户"这一点,是很多网上商店共有的模式,这一模式类似Observer patern.   具体的说,如果网上商店中商品在名称 价格等方面有变化,如果系统能自动通知会员,将是网上商店区别传统商店的一大特色.这就需要在商品product中加入Observer这样角色,以便product细节发生变化时,Observer能自动观察到这种变化,并能进行及时的update或notify动作. Java的API还为为我们提供现成的Observer接口Java.util.Observer.我们只要直接使用它就可以.   我们必须extends Java.util.Observer才能真正使用它:   1.提供Add/Delete observer的方法;   2.提供通知(notisfy) 所有observer的方法;



//产品类 可供Jsp直接使用UseBean调用 该类主要执行产品数据库插入 更新

public class product extends Observable{ 

  private String name;

  private float price;



  public String getName(){ return name;}

  public void setName(){

   this.name=name;

  //设置变化点 

   setChanged();

   notifyObservers(name);



  }   



  public float getPrice(){ return price;}

  public void setPrice(){

   this.price=price;

  //设置变化点

   setChanged();

   notifyObservers(new Float(price)); 



  }



  //以下可以是数据库更新 插入命令.

  public void saveToDb(){

  .....................





}



我们注意到,在product类中 的setXXX方法中,我们设置了 notify(通知)方法, 当Jsp表单调用setXXX,实际上就触发了notisfyObservers方法,这将通知相应观察者应该采取行动了.   下面看看这些观察者的代码,他们究竟采取了什么行动:



//观察者NameObserver主要用来对产品名称(name)进行观察的

public class NameObserver implements Observer{



  private String name=null;



  public void update(Observable obj,Object arg){



    if (arg instanceof String){



     name=(String)arg;

     //产品名称改变值在name中

     System.out.println("NameObserver :name changet to " name);



    }





  }



}



//观察者PriceObserver主要用来对产品价格(price)进行观察的

public class PriceObserver implements Observer{



  private float price=0;



  public void update(Observable obj,Object arg){



    if (arg instanceof Float){



     price=((Float)arg).floatValue();

  

     System.out.println("PriceObserver :price changet to " price);



    }





  }



}



Jsp中我们可以来正式执行这段观察者程序:



<jsp:useBean id="product" scope="session" class="Product" />

<jsp:setProperty name="product" property="*" />



<jsp:useBean id="nameobs" scope="session" class="NameObserver" />

<jsp:setProperty name="product" property="*" />



<jsp:useBean id="priceobs" scope="session" class="PriceObserver" />

<jsp:setProperty name="product" property="*" />



<%



if (request.getParameter("save")!=null)

{ 

  product.saveToDb();





  out.println("产品数据变动 保存! 并已经自动通知客户"); 



}else{



  //加入观察者

  product.addObserver(nameobs);



  product.addObserver(priceobs);



%>



  //request.getRequestURI()是产生本jsp的程序名,就是自己调用自己

  <form action="<%=request.getRequestURI()%>" method=post>



  <input type=hidden name="save" value="1">

  产品名称:<input type=text name="name" >

  产品价格:<input type=text name="price">

  <input type=submit>



  </form>



<%



} 



%>



执行改Jsp程序,会出现一个表单录入界面, 需要输入产品名称 产品价格,点按Submit后,还是执行该jsp的if (request.getParameter("save")!=null)之间的代码.   由于这里使用了数据javabeans的自动赋值概念,实际程序自动执行了setName setPrice语句.你会在服务器控制台中发现下面信息::   NameObserver :name changet to ?????(Jsp表单中输入的产品名称)   PriceObserver :price changet to ???(Jsp表单中输入的产品价格);   这说明观察者已经在行动了.!!   同时你会在执行jsp的浏览器端得到信息:   产品数据变动 保存! 并已经自动通知客户   上文由于使用jsp概念,隐含很多自动动作,现将调用观察者的Java代码写如下



public class Test {



  public static void main(String args[]){



Product product=new Product();



NameObserver nameobs=new NameObserver();

PriceObserver priceobs=new PriceObserver();



//加入观察者

product.addObserver(nameobs);

product.addObserver(priceobs);



product.setName("橘子红了");

product.setPrice(9.22f); 



  }



}



你会在发现下面信息::   NameObserver :name changet to 橘子红了   PriceObserver :price changet to 9.22   这说明观察者在行动了.!!
STM32 FDCAN热插拔恢复机制与自动重发功能优化 本文深入分析了STM32 FDCAN在热插拔场景下触发bus-off状态导致通讯中断的根本原因,指出自动重发功能是问题关键。通过禁用自动重发、配置硬件自动恢复机制及优化总线参数,实现了FDCAN热插拔后的100%稳定恢复,为工业应用提供了可靠的CAN总线解决方案。 阅读详情

相关推荐

WSOLA原理及matlab仿真

WSOLA原理 对于 OLA 算法来说,常常无法保持原信号中的周期性结构,在帧裁剪的过程中,不能保证每一个帧都能覆盖完整周期并保证其相位对齐,会产生相位跳跃失真。 为保证**基频不变**,就要使用 WSOLA 算法。 WSOLA 并不直接在 Ha 处找一帧进行直接拼接,而是在一个区间内寻找与理想帧最接近的一帧进行叠加。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8a234f4fde104fc69a9f3ddb7bcf3014.png?x-oss-process=ima

ManiacLook的博客 3217

Observer设计模式

Observer模式 一、Observer设计模式初步描述 1.1 问题 Observer模式应该可以说是应用最多、影响最广的模式之一,因为Observer的一个实例Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦。个人也认为Observer模式是软件开发过程中必须要掌握和使用的模式之一。在MFC中,Do

勇敢无畏的活着 1225

嵌入式系统(一):鸿蒙系统

本文为期末复习笔记,内容仅供参考???? 鸿蒙系统是一款面向万物互联时代的、全新的分布式操作系统 鸿蒙提出了基于同一套系统能力、适配多种终端形态的分布式理念 提供全场景(移动办公、运动健康、社交通信、指挥出行、媒体娱乐等)业务能力 华为是OpenHarmony开源项目的共建者、也是共享者之一 鸿蒙技术特性 分布式设计 一次开发,多端部署 系统与硬件解耦,弹性部署 三大分布式能力 分布式软总线 设备间互联互通提供分布式通信能力 从手动发现,进化成自发现 传输高带宽关键技术-极简协议 分布式数据管

weixin_45608532的博客 4308

设计模式之Observer(转载)

设计模式之Observer板桥里人 http://www.jdon.com 2002/3/16模式实战书籍《Java实用系统开发指南》Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Observe

设计模式 Design patterns 841

x86架构学习之中断

外部中断,一般是由CPU的外部引脚电信号触发,这些引脚留给硬件厂商去定义中断,例如主板厂商可以将USB中断挂载70号中断引脚上,MCU厂商可以将片上外设(SPI、I2C等)的中断挂载在指定中断线上。中断描述符主要用于说明该中断的入口地址,中断描述符表则是将中断描述符一项一项管理在一个数组中,每一项中断描述符占用8个字节(64位模式下,占用16字节),其。简称中断,后文如果没特别说明,中断都指外部中断,由外部IO事件触发,由于时钟源来自CPU外部,与CPU时钟不同源,因此是异步事件。

qq_26962739的博客 1572

矢量网络分析仪VNA的校准之SOLT方法

作者:杭州冥鸿电子科技有限公司 邮箱:huanglong@deepelec.com S参数的测量方法有两种,一种是基于扫频测量的原理(VNA),另外一种是基于快沿阶跃响应的原理(TDR)。 下图是VNA的原理框图,主要包括以下部分: (1)激励信号源:提供感兴趣的频率范围内的入射信号; (2)信号分离装置:含功分器和定向耦合器,分离出入射,反射和传输信号; (3)接收机:...

u010018619的博客 2万+

JDK Observer 设计模式之研究

    目前设计模式的介绍性文章越来越多,但设计模式的研究性文章仍然比较欠缺,这着实让人觉得有点遗憾。本文旨在抛砖引玉,具体分析一下java中jdk自带的observer设计模式(下文如没特别指出,observer设计模式就意指java中jdk自带的observer设计模式)的实现。1.       Observer 设计模式概要Observer设计模式在GOF里属于行为设计模式。JD

别岸 的专栏 1361

如何选择StandardScaler、MinMaxScaler和RobustScaler做标准化的对比解释和示例代码

选择合适的标准化方法取决于数据的特点和需求。如果数据分布接近正态分布且无异常值,可以使用。如果需要将数据映射到特定范围内并保持相对关系,可以使用。如果数据中存在异常值或离群点,可以使用进行鲁棒标准化。在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,StandardScaler表现更好(避免不同量纲对方差、协方差计算的影响);在不涉及距离度量、协方差、数据不符合正态分布、异常值较少的时候,可使用MinMaxScaler。

qq_36001281的博客 4941

设计模式05 之Observer Event

设计模式04 之Strategy 1. “组件协作” 模式: 现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。 典型模式 Template Method(模板方法) Observer(观察者模式) / Event(事件模式) Strategy(策略模式) 2. Observer 观察者模式 1. 动机(Motivation) 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个

ネロ・クラウディウス 273

ElectrolyteGPT:首个电池电解液逆向设计的生成式 AI 系统 —— 算法原理与复现解析

数据驱动的重要性:1100 万→100 万的精心筛选,比单纯增大模型更有效领域适配:fLine 表示法、正则分词、化学感知的数据增强(SMILES randomization)都是关键小模型的力量:6M 参数在特定化学空间的表现,远超通用大模型在相同任务上的零样本能力条件生成的极限:10 维条件导致模型崩溃,提示我们需要更好的条件编码策略(如 diffusion guidance、RLHF-style 偏好优化)未来方向配方实验验证。

ASKCOS博客 124

RK3568平台开发系列讲解:内核启动流程

第 493 行的 ENTRY 指明了了 Linux 内核入口,入口为stext,stext 定义在文件arch/arm/kernel/head.S 中 , 因此要分析Linux 内核的启动流程,就得先从文件arch/arm/kernel/head.S 的 stext 处开始分析。_mmap_switched 定义在文件 arch/arm/kernel/head-common.S,__mmap_switched 最终会调用 start_kernel 函数。⑥、r2=atags 或者设备树(dtb)首地址。

内核笔记 220

DesignPattern : Observer

1. Introduction     1. We can infer Observer Design Pattern from JDK GUI part.     2. The AWT and Swing GUI components are using Observer Design Pattern which we will discuss later.   2. A simpl...

Davyjones2010的博客 236

第十二段:基于env的重用

现代芯片的验证通常分为两个层次, 一是模块级别( block level, 也称为IP级别、 unit级别) 验证, 二是芯片级别( 也称为SOC级别) 验证。 一个大的芯片在开发时, 是分成多个小的模块来开发的。 每个模块开发一套独立的验证环境, 通常每个模块有 一个专门的验证人员负责。 当在模块级别验证完成后, 需要做整个系统的验证。 假设某个系统分成了三个模块,如下图: 这三个模块在模块级别验证时, 分别有自己的driver和s...

年糕的博客 423

[DesignPattern]Observer Pattern (Python)

周五听峰哥说java的设计模式,于是看看python的实现,理解下。 #!/usr/bin/env python # -*- coding: utf-8 -*- # observer_simple.py # Date: 2014-03-16 # CopyRight: orangleliu@gmail.com # Lisence: BSD # tips:简单实现观察者模式 class Sub

orangleliu 笔记本 1895

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java设计模式之Observer

Java设计模式之Observer 1.概念 observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。...

seaizon的专栏 157

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

设计模式---观察者模式(DesignPattern_Observer)

摘录自:设计模式与游戏完美开发 十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合...

su9257的博客 162

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

设计模式17——Observer设计模式

Observer观察者设计模式用于将对象的变化通知给感兴趣的用户。在Observer模式中的角色为主题(subject)与观察者(observer),观察者订阅它感兴趣的主题,一个主题可以被多个观 察者订阅,当主题的状态发生变化时,它必须通知(notify)所有订阅它的观察者,观察者检视主题的状态变化,并作出对应的动作,所以Observer模式也称之为Publish-Subscribe模式。 Ob

Tony Chen的专栏 1656

[Design Pattern] Observer Pattern 简单案例

Observer Pattern,即观察者模式,当存在一对多关系,例如一个对象一有变动,就要自动通知被依赖的全部对象得场景,属于行为类的设计模式。 下面是一个观察者模式的简单案例。 Observer 定义观察者的接口,定义需要观察的对象,已经被通知的接口。BinaryObserver, OctalObserver, HexaObserver 各自实现了 Observer 接口。...

180

在Java中,什么叫观察者设计模式(observer design pattern)?

下面是一个简单的Java代码演示观察者设计模式,其中一个WeatherData类是被观察者,而两个观察者CurrentConditionsDisplay和StatisticsDisplay都实现了Observer接口,以便接收WeatherData对象的状态变化通知并作出相应的处理。在观察者设计模式中,有两种角色:观察者和被观察者。在观察者设计模式中,目标对象和观察者对象之间是松耦合的,目标对象并不直接调用观察者对象的方法,而是通过定义一些接口,使得目标对象和观察者对象能够协同工作。

Blue92120的博客 845

设计模式(八)【Observer模式】

Observer模式 《设计模式》分类 分类 意图 例子 用途 创建型 创建或实例化对象 Abstract FactorySingletonDouble-Checked LockingFactory Method 实例化对象 结构型 将已有的对象组合起来 FacadeAdapterBridge 处理接口将实现与抽象联系起来 行为型 给出一种提供灵活(变化)行为的方式 Str...

xiaowei_innocence的博客 523

设计模式—行为型-Observer(观察者)

设计模式—行为型-Observer(观察者)       1. 意图     定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。      2. 结构图           3. 简述   Subject目标是一个个数据模块。Observer观察者是观察这些数据模块并向用户做出展示的对象。MVC

TechTiger的博客 1137

设计模式之Observer——公交篇(原创)

设计模式之Observer——公交篇  说到公交车,我想大家都不陌生吧,坐过公交车的朋友可能都知道,一般公交车上都有售票员(BusConductor),当然无人售票车要除外了。售票员(BusConductor)除了收取乘客(Passenger)的车费还起着监控的作用。下面让我们看看这个过程该如何实现呢?  1、我们先定义售票员(BusConductor)接口类: p

lxgljj的专栏 4019

The Observer Design Pattern

listeners;Picture 1:Picture 2:Picture 3:White ballRed ballHintsTo dodeclared.Fantastic.observer?Ball.javaMain.java。

tyytareyou4的博客 164

C++ Observer设计模式的学习

Observer设计模式的学习

roufoo的博客 480
上一篇: JBuilder 6 :Borland方式的Java集成开发环境
下一篇: 使用Java 输出/输出流读写数据
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值