zoukankan      html  css  js  c++  java
  • 协调多个对象之间的交互—中介者模式(三)

    20.3 完整解决方案

          为了协调界面组件对象之间的复杂交互关系,Sunny公司开发人员使用中介者模式来设计客户信息管理窗口,其结构示意图如图20-7所示:

    20-7 引入了中介者类的“客户信息管理窗口”结构示意图

         20-7只是一个重构之后的结构示意图,在具体实现时,为了确保系统具有更好的灵活性和可扩展性,我们需要定义抽象中介者和抽象组件类,其中抽象组件类是所有具体组件类的公共父类,完整类图如图20-8所示:

    20-8 重构后的“客户信息管理窗口”结构图

          在图20-8中,Component充当抽象同事类,ButtonListComboBoxTextBox充当具体同事类,Mediator充当抽象中介者类,ConcreteMediator充当具体中介者类,ConcreteMediator维持了对具体同事类的引用,为了简化ConcreteMediator类的代码,我们在其中只定义了一个Button对象和一个TextBox对象。完整代码如下所示:

    1. //抽象中介者  
    2. abstract class Mediator  
    3.     public abstract void componentChanged(Component c);  
    4.  
    5.   
    6. //具体中介者  
    7. class ConcreteMediator extends Mediator  
    8.     //维持对各个同事对象的引用  
    9.     public Button addButton;  
    10.     public List list;  
    11.     public TextBox userNameTextBox;  
    12.     public ComboBox cb;  
    13.   
    14.     //封装同事对象之间的交互  
    15.     public void componentChanged(Component c)  
    16.         //单击按钮  
    17. if(c == addButton)  
    18.             System.out.println("--单击增加按钮--");  
    19.             list.update();  
    20.             cb.update();  
    21.             userNameTextBox.update();  
    22.          
    23.         //从列表框选择客户  
    24.         else if(c == list)  
    25.             System.out.println("--从列表框选择客户--");  
    26.             cb.select();  
    27.             userNameTextBox.setText();  
    28.          
    29.         //从组合框选择客户  
    30.         else if(c == cb)  
    31.             System.out.println("--从组合框选择客户--");  
    32.             cb.select();  
    33.             userNameTextBox.setText();  
    34.          
    35.      
    36.  
    37.   
    38. //抽象组件类:抽象同事类  
    39. abstract class Component  
    40.     protected Mediator mediator;  
    41.       
    42.     public void setMediator(Mediator mediator)  
    43.         this.mediator mediator;  
    44.      
    45.   
    46.     //转发调用  
    47.     public void changed()  
    48.         mediator.componentChanged(this);  
    49.      
    50.       
    51.     public abstract void update();    
    52.  
    53.   
    54. //按钮类:具体同事类  
    55. class Button extends Component  
    56.     public void update()  
    57.         //按钮不产生交互  
    58.      
    59.  
    60.   
    61. //列表框类:具体同事类  
    62. class List extends Component  
    63.     public void update()  
    64.         System.out.println("列表框增加一项:张无忌。");  
    65.      
    66.       
    67.     public void select()  
    68.         System.out.println("列表框选中项:小龙女。");  
    69.      
    70.  
    71.   
    72. //组合框类:具体同事类  
    73. class ComboBox extends Component  
    74.     public void update()  
    75.         System.out.println("组合框增加一项:张无忌。");  
    76.      
    77.       
    78.     public void select()  
    79.         System.out.println("组合框选中项:小龙女。");  
    80.      
    81.  
    82.   
    83. //文本框类:具体同事类  
    84. class TextBox extends Component  
    85.     public void update()  
    86.         System.out.println("客户信息增加成功后文本框清空。");  
    87.      
    88.       
    89.     public void setText()  
    90.         System.out.println("文本框显示:小龙女。");  
    91.      
    92.  

          编写如下客户端测试代码:

    1. class Client  
    2.     public static void main(String args[])  
    3.         //定义中介者对象  
    4.         ConcreteMediator mediator;  
    5.         mediator new ConcreteMediator();  
    6.           
    7.         //定义同事对象  
    8.         Button addBT new Button();  
    9.         List list new List();  
    10.         ComboBox cb new ComboBox();  
    11.         TextBox userNameTB new TextBox();  
    12.   
    13.         addBT.setMediator(mediator);  
    14.         list.setMediator(mediator);  
    15.         cb.setMediator(mediator);  
    16.         userNameTB.setMediator(mediator);  
    17.   
    18.         mediator.addButton addBT;  
    19.         mediator.list list;  
    20.         mediator.cb cb;  
    21.         mediator.userNameTextBox userNameTB;  
    22.           
    23.         addBT.changed();  
    24.         System.out.println("-----------------------------");  
    25.         list.changed();  
    26.      
    27.  

          编译并运行程序,输出结果如下:

    --单击增加按钮--

    列表框增加一项:张无忌。

    组合框增加一项:张无忌。

    客户信息增加成功后文本框清空。

    -----------------------------

    --从列表框选择客户--

    组合框选中项:小龙女。

    文本框显示:小龙女。


    【作者:刘伟 http://blog.csdn.net/lovelion

  • 相关阅读:
    java 日期的格式化
    JAVA 线程
    java 异常
    java 内部类
    java 多态
    SpringBoot(12) SpringBoot创建非web应用
    SpringCloud(1) 架构演进和基础知识简介
    SpringBoot(11) SpringBoot自定义拦截器
    SpringBoot(10) Servlet3.0的注解:自定义原生Servlet、自定义原生Listener
    SpringBoot(9) SpringBoot整合Mybaties
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254858.html
Copyright © 2011-2022 走看看