网站建设发布设需求,从旁鼓动人做某事 网站,成都市文化馆网站建设,二次元wordpress主题3#xff09;中介者与同事类的扩展
1.结构图 新增了具体同事类Label和具体中介者类SubConcreteMediator。
2.代码实现
//文本标签类#xff1a;具体同事类
public class Label extends Component {public void update() {System.out.println(文本标签内容改变#…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.适用场景 系统中对象之间存在复杂的引用关系系统结构混乱且难以理解。 一个对象由于引用了其他很多对象并且直接和这些对象通信导致难以复用该对象。 想通过一个中间类来封装多个类中的行为而又不想生成太多的子类可以通过引入中介者类来实现在中介者中定义对象交互的公共行为如果需要改变行为则可以增加新的具体中介者类。