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

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

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

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

相关推荐
melonbo5 天前
中介者模式和观察者模式的区别是什么
观察者模式·中介者模式
困鲲鲲22 天前
设计模式:中介者模式 Mediator
设计模式·中介者模式
凤山老林1 个月前
Spring Boot中的中介者模式:终结对象交互的“蜘蛛网”困境
java·spring boot·后端·设计模式·中介者模式
缘来是庄1 个月前
设计模式之中介者模式
java·设计模式·中介者模式
何中应2 个月前
【设计模式-4.8】行为型——中介者模式
java·设计模式·中介者模式
qqxhb2 个月前
零基础设计模式——行为型模式 - 中介者模式
java·设计模式·go·中介者模式
lpfasd1232 个月前
中介者模式(Mediator Pattern)
中介者模式
on the way 1232 个月前
行为型设计模式之Mediator(中介者)
java·设计模式·中介者模式
暴躁哥3 个月前
深入理解设计模式之中介者模式
设计模式·中介者模式
季鸢3 个月前
Java设计模式之中介者模式详解
java·设计模式·中介者模式