相关文章链接:Java网络编程精解之基于MVC和RMI的分布式应用一
13.4 创建控制器
StoreControllerImpl类实现了StoreController接口。每个StoreControllerImpl对象与一个StoreModel对象和一个StoreView对象关联。如例程13-8所示是StoreControllerImpl类的源程序。
例程13-8 StoreControllerImpl.java
package store; import java.util.*; public class StoreControllerImpl implements StoreController{ private StoreModel storeModel; private StoreView storeView; public StoreControllerImpl(StoreModel model, StoreView view ) { try{ storeModel=model; storeView=view; view.addUserGestureListener(this); //向视图注册控制器自身 }catch(Exception e){ reportException(e); } }
/** 报告异常信息 */ private void reportException(Object o){ try{ storeView.showDisplay(o); }catch(Exception e){ System.out.println("StoreControllerImpl reportException"+e); } }
/** 处理根据ID查询客户的动作 */ public void handleGetCustomerGesture(long id){ Customer cust=null; try{ cust=storeModel.getCustomer(id); storeView.showDisplay(cust); }catch(Exception e){ reportException(e); cust=new Customer(id); try{ storeView.showDisplay(cust); }catch(Exception ex){ reportException(ex); } } }
/** 处理添加客户的动作 */ public void handleAddCustomerGesture(Customer c){ try{ storeModel.addCustomer(c); }catch(Exception e){ reportException(e); } }
/** 处理删除客户的动作 */ public void handleDeleteCustomerGesture(Customer c){…}
/** 处理更新客户的动作 */ public void handleUpdateCustomerGesture(Customer c){…}
/** 处理列出所有客户清单的动作 */ public void handleGetAllCustomersGesture(){…} }
|
StoreControllerImpl类的handleGetCustomerGesture(long id)方法处理用户在界面上按下【查询客户】按钮的事件,该方法先调用StoreModel对象的getCustomer(id)方法获得相应的客户信息,然后调用StoreView对象的showDisplay(cust)方法显示客户信息:
try{ cust=storeModel.getCustomer(id); //调用模型去处理业务逻辑 storeView.showDisplay(cust); //调用视图去显示数据 }catch(Exception e){ reportException(e); … }
|
由此可见,控制器是视图与模型之间的调度者,控制器调用模型去处理业务逻辑,并且调用视图去显示数据。
StoreControllerImpl类会捕获模型抛出的各种异常,然后由reportException()方法在图形界面上向用户报告异常:
private void reportException(Object o){ try{ storeView.showDisplay(o); //调用视图去显示异常 }catch(Exception e){ System.out.println("StoreControllerImpl reportException"+e); } }
|
StoreViewImpl类的showDisplay()方法不仅能显示客户信息,还能显示异常信息。异常信息在StoreGui的日志面板logPan中显示。
13.5 创建模型
StoreModelImpl类实现了StoreModel接口。StoreModelImpl类需要通过JDBC API访问数据库。本范例创建了一个DBService接口,它对JDBC API做了轻量级的封装,主要是封装了Connection接口,如图13-8所示。
图13-8 DBService接口对JDBC API做了轻量级封装