设计者模式之中介者模式(下)

3)中介者与同事类的扩展
1.结构图

在这里插入图片描述

新增了具体同事类Label和具体中介者类SubConcreteMediator。

2.代码实现
//文本标签类:具体同事类
public class Label extends Component {
	public void update() {
		System.out.println("文本标签内容改变,客户信息总数加1。");
	}
}
 
//新增具体中介者类
public 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();
		}
	}
}

客户端类

public 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.适用场景
  • 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。

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

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

相关推荐

  1. 设计模式中介模式

    2024-04-12 06:54:02       9 阅读
  2. 【前端设计模式调停模式中介模式

    2024-04-12 06:54:02       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-12 06:54:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-12 06:54:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-12 06:54:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-12 06:54:02       20 阅读

热门阅读

  1. Ceph学习 -8.认证管理-用户基础

    2024-04-12 06:54:02       18 阅读
  2. 相似图片分类 [华为]【并查集】

    2024-04-12 06:54:02       24 阅读
  3. 【SpinalHDL】Scala编程中的var及val

    2024-04-12 06:54:02       41 阅读
  4. WebSocket

    2024-04-12 06:54:02       17 阅读
  5. js面试---ES6

    2024-04-12 06:54:02       50 阅读
  6. brpc: bthread使用

    2024-04-12 06:54:02       17 阅读
  7. RabbitMQ

    RabbitMQ

    2024-04-12 06:54:02      45 阅读
  8. Git 的基本概念和使用方式

    2024-04-12 06:54:02       22 阅读
  9. 2024认证杯数学建模C题思路模型代码论文

    2024-04-12 06:54:02       20 阅读
  10. BeanUtils.copyProperties转换工具类,解决list转换

    2024-04-12 06:54:02       19 阅读