孙卫琴老师新作《Java网络编程精解》中的第十三章“基于MVC和RMI的分布式应用”,小编给它切分为一个小系列,共两篇文章。本文是其中的第二篇,具体内容包括创建控制器、创建模型、创建独立应用、创建分布式应用和小结以及学习完这一章后对自己的自测题,供大家参考!

    第3章 ServerSocket用法详解 第10章 Java语言的反射机制 第13章 基于MVC和RMI的分布
    ServerSocket用法详解一
    Java语言的反射机制一
    基于MVC和RMI的分布式应用一
    ServerSocket用法详解二
    Java语言的反射机制二
    基于MVC和RMI的分布式应用二
    ServerSocket用法详解三
       

    相关文章链接: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做了轻量级封装


    共5页: 1 [2] [3] [4] [5] 下一页
    【内容导航】