《设计模式精解》学习笔记(十三)------Observer(观察者)模式
来源:互联网 发布:vwap算法 编辑:程序博客网 时间:2024/05/01 18:49
《设计模式精解》学习笔记(十三)------Observer(观察者)模式
GoF:Observer模式的意图是“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”。
举个例子:一般在炒股票的时候人们总是紧盯着大盘的起伏涨跌。根据某支股票的涨跌来决定买进或抛出。而在整个交易中紧盯着大盘的这个人就是一个观察着。他将观察的结果通知他的亲属朋友,或自己做出决定去交易。Observer模式是如此的有用,以至于在Java的JDK包当中容纳了Observer模式的一个实现版本。Observable类和Observer接口组成了这个模式。关于Observable类和Observer接口在JDK的帮助文档中有详细的介绍。在Observer模式的学习过程中,我运用了JDK中的Observable类和Observer接口来实现了Observer模式的代码。
下面是Observer模式的UML图:
上图我画的不是很规范,但是已经表达出了Observer模式。
下面是实例代码:
package Observer;
import java.util.Observable;
public class Stock extends Observable //继承Observable类
{
private String stockName;
private float stockPrice;
private int stockId;
public Stock(int id, String name, float price)//设定初始状态
{
this.stockId = id;
this.stockName = name;
this.stockPrice = price;
}//end Stock(...)
public String getName()
{
return stockName;
}//end getName()
public float getPrice()
{
return stockPrice;
}//end getPrice()
public int getId()
{
return this.stockId;
}//end getId()
public void setName(String name)
{
this.stockName = name;
setChanged(); //名称已经改变
notifyObservers("stockName"); //
}//end setName(...)
public void setPrice(float price)
{
this.stockPrice = price;
setChanged();
notifyObservers("stockPrice");
}//end setPrice(...)
}//end class Stock
package Observer;
import java.util.Observable;
import java.util.Observer;
public class NameObserver implements Observer
{
public void update(Observable obj, Object arg)
{
try{
if(arg instanceof String){
// System.out.println("arg333 = " + arg);
String argName = (String)arg;
// System.out.println("argName = " + argName);
if(argName.trim().equalsIgnoreCase("stockName")){
// System.out.println("name here");
int id = 0;
String name = "";
if(obj instanceof Stock){
Stock sto = (Stock)obj;
name = sto.getName();
id = sto.getId();
}
System.out.println("NameObserver: Stock " + id + "'s name has changed to " + name);
}
}
}catch(Exception e){
e.printStackTrace();
}
}//end update(...)
}//end class NameObserver
package Observer;
import java.util.Observable;
import java.util.Observer;
public class PriceObserver implements Observer
{
public void update(Observable obj, Object arg)
{
try{
if(arg instanceof String){
String argName = (String)arg;
if(argName.trim().equalsIgnoreCase("stockPrice")){
int id = 0;
float price =
if(obj instanceof Stock){
Stock sto = (Stock)obj;
price = sto.getPrice();
id = sto.getId();
}
System.out.println("PriceObserver: Stock " + id + "'s price has changed to " + price);
}
}
}catch(Exception e){
e.printStackTrace();
}
}//end update(...)
}//end class PriceObserver
测试代码:
package Observer;
public class ObserverPattern
{
private Stock stock;//实例化一个股票对象
private NameObserver stockName; //实例化一个观察股票名称的对象
private PriceObserver stockPrice;//实例化一个观察股票价格的对象
public ObserverPattern()//初始化类成员
{
stock = new Stock(1, "海南椰岛",
stockName = new NameObserver();
stockPrice = new PriceObserver();
}//end ObserverPattern()
public void showHowToObserver()
{
stock.addObserver(stockName);
stock.addObserver(stockPrice);
// stock.setName("/"百度/"");//重新设置股票的名称
stock.setPrice(
// System.out.println("");
// stock.setName("/"Google/"");//再次设置股票的名称
stock.setPrice(
}//end showHowToObserver()
public static void main(String[] args)
{
System.out.println("The observer pattern!");
ObserverPattern op = new ObserverPattern();
op.showHowToObserver();
}//end main(...)
}//end class ObserverPattern
Observer模式充分体现了OO的特性,理解了Observer模式能更好的理解OO思想。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=954048
- 《设计模式精解》学习笔记(十三)------Observer(观察者)模式
- 设计模式学习笔记十九(Observer观察者模式)
- 【设计模式】学习笔记2:观察者模式(Observer)
- 设计模式学习笔记-观察者模式(Observer)
- 设计模式C++学习笔记之一(Observer观察者模式)
- 设计模式学习--观察者模式(observer)
- 设计模式之(十三)--观察者模式(observer)
- 设计模式学习笔记--观察者(Observer)模式
- 设计模式--观察者(Observer)
- 设计模式-观察者(Observer)
- 观察者设计模式(Observer)
- Observer(观察者)设计模式
- C#面向对象设计模式纵横谈 学习笔记19 Observer观察者模式(行为型模式)
- 设计模式笔记之观察者模式(Observer Patterns)
- 设计模式笔记2:观察者模式(Observer Pattern)
- 设计模式学习9 -- 观察者模式(Observer)
- 设计模式学习(二)-- 观察者模式 Observer Pattern
- 设计模式学习总结:观察者模式(Observer Pattern)
- 面试问题
- 《设计模式精解》学习笔记(十一)------Decorator(装饰)模式
- 基于.Net平台应用程序唯一运行实例实现
- 《设计模式精解》学习笔记(十二)------Singleton(单件)模式
- 在人力资源树当中,上级对下级员工信息查看修改操作。
- 《设计模式精解》学习笔记(十三)------Observer(观察者)模式
- 《设计模式精解》学习笔记(十四)------Template Method(模板方法)模式
- 《设计模式精解》学习笔记(十五)------FactoryMethod(工厂方法)模式
- 做树题目心得体会
- 《设计模式精解》学习笔记(十六)------总结
- Jabber学习笔记 之二
- 设计模式----Builder(生成器)模式
- 设计模式----Prototype(原形)模式
- 程序员考试笔记