软件设计模式与体系结构 实验十二 中介者模式

【实验内容和要求】

某软件公司要开发一套CRM系统,其中包含一个客户信息管理模块,所设计的“客户信息管理窗口”界面效果图如下图所示:

软件设计模式与体系结构 实验十二 中介者模式_第1张图片

软件设计模式与体系结构 实验十二 中介者模式_第2张图片

JAVA语言实现(C#控制台应用程序实现)该模式。绘制该模式的UML图。

一、实验目的:

1) 掌握中介者模式(Mediator)的特点

2) 分析具体问题,使用中介者模式进行设计。

 

二、实验环境:

       Eclipse

 

三、实验内容:

       模式UML

软件设计模式与体系结构 实验十二 中介者模式_第3张图片

【模式代码(JAVA语言实现)】

//抽象中介者 

abstract class Mediator { 

    public abstract void componentChanged(Component c); 

}

//按钮类:具体同事类 

class Button extends Component { 

    public void update() { 

        //按钮不产生交互 

    } 

}

//组合框类:具体同事类 

class ComboBox extends Component { 

    public void update() { 

        System.out.println("组合框增加一项:张无忌。"); 

    } 

     

    public void select() { 

        System.out.println("组合框选中项:小龙女。"); 

    } 

}

//抽象组件类:抽象同事类 

abstract class Component { 

    protected Mediator mediator; 

     

    public void setMediator(Mediator mediator) { 

        this.mediator = mediator; 

    } 

 

    //转发调用 

    public void changed() { 

        mediator.componentChanged(this); 

    } 

     

    public abstract void update();   

} 

//具体中介者 

class ConcreteMediator extends Mediator {

     // 维持对各个同事对象的引用

     public Button addButton;

     public List list;

     public TextBox userNameTextBox;

     public ComboBox cb;



     // 封装同事对象之间的交互

     public void componentChanged(Component c) {

          // 单击按钮

          if (c == addButton) {

               System.out.println("--单击增加按钮--");

               list.update();

               cb.update();

               userNameTextBox.update();

          }

          // 从列表框选择客户

          else if (c == list) {

               System.out.println("--从列表框选择客户--");

               cb.select();

               userNameTextBox.setText();

          }

          // 从组合框选择客户

          else if (c == cb) {

               System.out.println("--从组合框选择客户--");

               cb.select();

               userNameTextBox.setText();

          }

     }

}

//文本标签类:具体同事类 

class Label extends Component { 

    public void update() { 

        System.out.println("文本标签内容改变,客户信息总数加1。"); 

    } 

}

//列表框类:具体同事类 

class List extends Component { 

    public void update() { 

        System.out.println("列表框增加一项:张无忌。"); 

    } 

     

    public void select() { 

        System.out.println("列表框选中项:小龙女。"); 

    } 

}

//新增具体中介者类 

class SubConcreteMediator extends ConcreteMediator {

     // 增加对Label对象的引用

     public Label label;



     public void componentChanged(Component c) {

          // 单击按钮

          if (c == addButton) {

               System.out.println("--单击增加按钮--");

               list.update();

               cb.update();

               userNameTextBox.update();

               label.update(); // 文本标签更新

          }

          // 从列表框选择客户

          else if (c == list) {

               System.out.println("--从列表框选择客户--");

               cb.select();

               userNameTextBox.setText();

          }

          // 从组合框选择客户

          else if (c == cb) {

               System.out.println("--从组合框选择客户--");

               cb.select();

               userNameTextBox.setText();

          }

     }

}

//文本框类:具体同事类 

class TextBox extends Component { 

    public void update() { 

        System.out.println("客户信息增加成功后文本框清空。"); 

    } 

     

    public void setText() { 

        System.out.println("文本框显示:小龙女。"); 

    } 

}

class Client { 

    public static void main(String args[]) { 

        //用新增具体中介者定义中介者对象 

        SubConcreteMediator mediator; 

        mediator = new SubConcreteMediator(); 

         

        Button addBT = new Button(); 

        List list = new List(); 

        ComboBox cb = new ComboBox(); 

        TextBox userNameTB = new TextBox(); 

        Label label = new Label(); 

 

        addBT.setMediator(mediator); 

        list.setMediator(mediator); 

        cb.setMediator(mediator);  

        userNameTB.setMediator(mediator); 

        label.setMediator(mediator); 

         

        mediator.addButton = addBT; 

        mediator.list = list; 

        mediator.cb = cb; 

        mediator.userNameTextBox = userNameTB; 

        mediator.label = label; 

             

        addBT.changed(); 

        System.out.println("-----------------------------"); 

        list.changed(); 

    } 

}

【运行截图】

软件设计模式与体系结构 实验十二 中介者模式_第4张图片

 

四、心得体会:

中介者模式主要适用于以下情况:

1) 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。

2) 一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象

3)想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。可以通过引入中介者类来实现,在中介者中定义对象交互的公共行为,如果需要改变行为则可以增加新的具体中介者类。

你可能感兴趣的:(软件设计模式与体系结构 实验十二 中介者模式)