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

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

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

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

相关推荐
Alex艾力的IT数字空间2 天前
再思“把事情做对”与“把事情做好”的辩证关系与先后顺序
信息可视化·需求分析·学习方法·抽象工厂模式·远程工作·原型模式·中介者模式
sg_knight13 天前
设计模式实战:中介者模式(Mediator)
microsoft·设计模式·中介者模式
胡志辉的博客16 天前
多智能体协作,不是多开几个 Agent:从中介者模式看 OpenClaw 和 Hermes Agent
人工智能·设计模式·ai·agent·中介者模式·openclaw·herman
yaaakaaang19 天前
十八、中介者模式
java·中介者模式
砍光二叉树1 个月前
【设计模式】行为型-中介者模式
设计模式·中介者模式
Yu_Lijing1 个月前
基于C++的《Head First设计模式》笔记——中介者模式
笔记·设计模式·中介者模式
一个儒雅随和的男子1 个月前
复杂业务的解决之道,如何使用“中介者模式(Mediator Pattern)”解决复杂业务场景
microsoft·中介者模式
我是苏苏2 个月前
Web开发:使用MediatR包实现中介者模式,避免组件之间直接通信
前端·中介者模式
知无不研2 个月前
中介者模式
c++·设计模式·中介者模式
逆境不可逃2 个月前
【从零入门23种设计模式17】行为型之中介者模式
java·leetcode·microsoft·设计模式·职场和发展·中介者模式