中介者模式(Mediator)

一、实验目的:

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

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

二、实验环境:

Eclipse

三、实验内容:

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

 

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

【模式UML图】

 

【运行代码】

Button.java

//按钮类:具体同事类 

class Button extends Component { 

  public void update() { 

      //按钮不产生交互 

  } 

}

 

 

ComboBox.java

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

class ComboBox extends Component { 

  public void update() { 

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

  } 

   

  public void select() { 

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

  } 

 

Component.java

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

abstract class Component { 

  protected Mediator mediator

   

  public void setMediator(Mediator mediator) { 

      this.mediator = mediator

  } 

 

  //转发调用 

  public void changed() { 

      mediator.componentChanged(this); 

  } 

   

  public abstract void update();   

 

ConcreteMediator.java

//具体中介者 

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(); 

      } 

  } 

}

 

Label.java

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

class Label extends Component { 

  public void update() { 

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

  } 

 

List.java

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

class List extends Component { 

  public void update() { 

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

  } 

   

  public void select() { 

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

  } 

 

Mediator.java

//抽象中介者 

abstract class Mediator { 

  public abstract void componentChanged(Component c); 

 

SubConcreteMediator.java

//新增具体中介者类 

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(); 

      } 

  } 

}

 

TextBox.java

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

class TextBox extends Component { 

  public void update() { 

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

  } 

   

  public void setText() { 

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

  } 

}

 

Client.java

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(); 

    } 

}

 

 

 

【运行截图】

 

四、心得体会:

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

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

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

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值