利用观察者模式处理业务单元的变化
来源:互联网 发布:全国打拐dna数据库查询 编辑:程序博客网 时间:2024/06/11 16:56
当需要上层对底层的操作的时候,可以使用观察者模式实现向上协作。也就是上层响应
底层的事件,但这个事件的执行代码由上层提供。
1、意图:
定义对象一对多的依赖关系,当一个对象发生变化的时候,所有依赖它的对象都得到通
知并且被自动更新。
2、结构
传统的观察者模式结构如下。
3,举例:
// PaymentEvent.java 传入数据的类
import java.util.*;
public class PaymentEvent extends EventObject {
private String Text; //定义 Text 内部变量
//构造函数
public PaymentEvent(Object source,String Text) {
super(source);
this.Text=Text; //接收从外部传入的变量
}
public String getText(){
return Text; //让外部方法获取用户输入字符串
}
}
//监听器接口
//PaymentListener.java
import java.util.*;
public interface PaymentListener extends EventListener {
public String Action(PaymentEvent e);
}
// Payment.java 平台类
import java.util.*;
public class Payment{
private double amount;
public double getAmount(){
return amount;
}
public void set(double value){
amount = value;
}
//事件编程
private ArrayList elv; //事件侦听列表对象
//增加事件事件侦听器
public void addPaymentListener(PaymentListener m) {
//如果表是空的,先建立它的对象
if (elv==null){
elv=new ArrayList();
}
//如果这个侦听不存在,则添加它
if (!elv.contains(m)){
elv.add(m);
}
}
//删除事件侦听器
public void removePaymentListener(PaymentListener m) {
if (elv!= null && elv.contains(m)) {
elv.remove(m);
}
}
//点火 ReadText 方法
protected String fireAction(PaymentEvent e) {
String m=e.getText();
if (elv != null) {
//激活每一个侦听器的 WriteTextEvett 事件
for (int i = 0; i < elv.size(); i++) {
PaymentListener s=(PaymentListener)elv.get(i);
m+=s.Action(e);
}
}
return m;
}
public String goSale(){
String x = "不变的流程一 ";
PaymentEvent m=new PaymentEvent(this,x);
x = fireAction(m); //可变的流
x += amount + ", 正在查询库存状态"; //属性和不变的流程二
return x;
}
}
调用:Test.java
import java.util.*;
public class Test {
//入口
public static void main(String[] args) {
Payment o1 = new Payment();
Payment o2 = new Payment();
Payment o3 = new Payment();
o1.addPaymentListener(new PaymentListener(){
public String Action(PaymentEvent e){
return e.getText()+" 现金支付 ";
}
});
o2.addPaymentListener(new PaymentListener(){
public String Action(PaymentEvent e){
return e.getText()+" 信用卡支付 ";
}
});
o3.addPaymentListener(new PaymentListener(){
public String Action(PaymentEvent e){
return e.getText()+" 支票支付 ";
}
});
o1.set(777);
o2.set(777);
o3.set(777);
System.out.println(o1.goSale());
System.out.println(o2.goSale());
System.out.println(o3.goSale());
}
}
- 利用观察者模式处理业务单元的变化
- 利用桥接模式封装业务单元变化
- 利用模板方法封装业务单元变化
- 利用装饰器模式封装核心业务单元
- 基于业务单元的开发与部署模式
- 基于业务单元的开发与部署模式
- Java用观察者模式重构复杂的业务代码
- 设计模式系列13---感知变化的观察者模型
- 观察者模式:使对象关注感兴趣的变化
- Swift中观察者模式观察一个值的变化
- 利用外观模式封装类的变化
- 利用委托加观察者模式实现老板状态变化通知C++
- 《设计模式 ● 观察者》之业务场景
- 观察者模式,Fragment监听Activity状态变化
- 利用观察者模式实现通知
- 利用观察者模式实现Service与Activity的通信
- 利用观察者模式实现data和ui的独立演化
- ContentProvider 实例详解二(观察者模式监测数据的变化)
- 代码重构的问题与解决方案
- 利用外观模式封装类的变化
- 利用适配器模式封装接口变化
- 利用桥接模式封装业务单元变化
- 利用装饰器模式封装核心业务单元
- 利用观察者模式处理业务单元的变化
- 实现后期装配的通用框架
- HibernateSessionFactory
- C++拷贝构造函数(深拷贝,浅拷贝)
- 组合模式的应用
- 职责链模式的应用
- 架构视图
- [ListView.View=List]的垂直滚动条
- SOA 的定义