软件设计模式与体系结构|软件设计模式与体系结构 实验十二 中介者模式
【实验内容和要求】
某软件公司要开发一套CRM系统,其中包含一个客户信息管理模块,所设计的“客户信息管理窗口”界面效果图如下图所示:
文章图片
文章图片
用JAVA语言实现(C#控制台应用程序实现)该模式。绘制该模式的UML图。
一、实验目的:
1) 掌握中介者模式(Mediator)的特点
2) 分析具体问题,使用中介者模式进行设计。
二、实验环境:
Eclipse
三、实验内容:
【软件设计模式与体系结构|软件设计模式与体系结构 实验十二 中介者模式】【模式UML图】
文章图片
【模式代码(JAVA语言实现)】
//抽象中介者 abstract class Mediator { public abstract void componentChanged(Component c);
}//按钮类:具体同事类 class Button extends Component { public void update() { //按钮不产生交互 } }//组合框类:具体同事类 class ComboBox extends Component { public void update() { System.out.println("组合框增加一项:张无忌。");
} public void select() { System.out.println("组合框选中项:小龙女。");
} }//抽象组件类:抽象同事类 abstract class Component { protected Mediator mediator;
public void setMediator(Mediator mediator) { this.mediator = mediator;
} //转发调用 public void changed() { mediator.componentChanged(this);
} public abstract void update();
} //具体中介者 class ConcreteMediator extends Mediator {// 维持对各个同事对象的引用public Button addButton;
public List list;
public TextBox userNameTextBox;
public ComboBox cb;
// 封装同事对象之间的交互public void componentChanged(Component c) {// 单击按钮if (c == addButton) {System.out.println("--单击增加按钮--");
list.update();
cb.update();
userNameTextBox.update();
}// 从列表框选择客户else if (c == list) {System.out.println("--从列表框选择客户--");
cb.select();
userNameTextBox.setText();
}// 从组合框选择客户else if (c == cb) {System.out.println("--从组合框选择客户--");
cb.select();
userNameTextBox.setText();
}}}//文本标签类:具体同事类 class Label extends Component { public void update() { System.out.println("文本标签内容改变,客户信息总数加1。");
} }//列表框类:具体同事类 class List extends Component { public void update() { System.out.println("列表框增加一项:张无忌。");
} public void select() { System.out.println("列表框选中项:小龙女。");
} }//新增具体中介者类 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();
}}}//文本框类:具体同事类 class TextBox extends Component { public void update() { System.out.println("客户信息增加成功后文本框清空。");
} public void setText() { System.out.println("文本框显示:小龙女。");
} }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();
} }
【运行截图】
文章图片
四、心得体会:
中介者模式主要适用于以下情况:
1) 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。
2) 一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象。
3)想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。可以通过引入中介者类来实现,在中介者中定义对象交互的公共行为,如果需要改变行为则可以增加新的具体中介者类。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 原生家庭之痛与超越