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

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 个月前
Qt C++设计模式->中介者模式
c++·qt·设计模式·中介者模式
java_heartLake1 个月前
设计模式之中介者模式
java·设计模式·中介者模式
严文文-Chris1 个月前
【设计模式-中介者模式】
设计模式·中介者模式
刷帅耍帅1 个月前
设计模式-中介者模式
设计模式·中介者模式
仙魁XAN2 个月前
Unity 设计模式 之 行为型模式 -【中介者模式】【迭代器模式】【解释器模式】
设计模式·迭代器模式·解释器模式·中介者模式
LB_bei2 个月前
设计模式-行为型模式-中介者模式
设计模式·中介者模式
coffee_baby2 个月前
化繁为简:中介者模式如何管理复杂对象交互
java·spring boot·microsoft·交互·中介者模式
星光技术人2 个月前
设计模式---中介者模式
设计模式·中介者模式
程序员与背包客_CoderZ2 个月前
C++设计模式——Mediator中介者模式
c语言·开发语言·c++·设计模式·中介者模式
惜.己2 个月前
设计模式之中介者模式
java·设计模式·intellij-idea·idea·中介者模式