java设计模式之观察者模式

          观察者模式是一种很常用的设计模式之一,它是一种多对一的监督机制,即一个多个观察者可以注册到一个观察者.被观察者的状态改变将引发观察者相应的业务.

        而现实中我们会碰到很多这样的情形,一个对象的业务引发依赖于另一个对象的状态改变,比如在一个订票系统中由需求决定,当我们对票价或名称进行调整时,对客户进行相应提示,而这时如果我们不用观察者模式,可能就需要创建线程来进行监控,这样就会增加系统的压力,并且使得系统稳定性和可维护性保障度并不高.

      本人针对票价改变引发相应业务案例结合jdk对观察者模式的支持类做了相应的设计尝试,代码如下:

 

   首先定义了一个Prouct为被观察者,Product继承了jdk自定义的Observable类,Observable里面封装了被观察者的状态改变,注册和删除观察者的方法:

 

package com.tzl.model.observe;

import java.util.Observable;

public class Product extends Observable {
 private float price ;

public float getPrice() {
 return price;
}

public void setPrice(float price) {
 this.price = price;
 setChanged();
 notifyObservers(new Float(price));
}
 

  
}

    其次定义了一个PriceObserve为观察者,它实现了Observer接口,Observer里update方法根据被观察者Observable的相应改变Observer做相应的业务.

package com.tzl.model.observe;

import java.util.Observable;
import java.util.Observer;

public class PriceObserve implements Observer{
 private Float priceFloat;
 @Override
 public void update(Observable o, Object arg) {
  // TODO Auto-generated method stub
  
  if (arg instanceof Float) {
   priceFloat=((Float) arg).floatValue();
   System.out.println("price 调整为"+priceFloat);
  }
  
 }

}

 

  最后,定义了一个ProductObserverControl来对观察者和被观察者注册关系进行管理和控制:

package com.tzl.model.observe;


public class ProductObserverControl {
private Product product;

public void setProduct(Product product) {
 this.product=product;
}

public void register(PriceObserve priceObserve) {
 product.addObserver(priceObserve);
}

public void removePriceObserve(PriceObserve priceObserve) {
 product.deleteObserver(priceObserve);
}
}

 

 测试代码:

package com.tzl.model.observe;

public class TestObserver {
public static void main(String[] args) {
 ProductObserverControl productObserverControl=new ProductObserverControl();
 PriceObserve priceObserve=new PriceObserve();
 Product product=new Product();
 productObserverControl.setProduct(product);
 productObserverControl.register(priceObserve);
 
 product.setPrice(521);
}

}

 

输出结果:

 

   

 

 

微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值