Java设计模式菜鸟系列(二十二)中介者模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40027109
中介者模式(Mediator):主要用来减少类与类之间的耦合的,由于假设类与类之间有依赖关系的话。不利于功能的拓展和维护,由于仅仅要改动一个对象,其他关联的对象都得进行改动。
一、uml建模:
二、代码实现
/**
* 中介者模式(Mediator):主要用来减少类与类之间的耦合的,由于假设类与类之间有依赖关系的话。
*
* 不利于功能的拓展和维护。由于仅仅要改动一个对象,其他关联的对象都得进行改动。 *
* 演示样例:以下以房屋(出租)中介为例
*/
interface Mediator {
void createMediator(); void recommendHouse();
} /**
* 咱(User)让中介帮我们推荐房子
*
* 所以咱须要持有一个中介实例
*/
abstract class User {
private Mediator mediator; public User(Mediator mediator) {
this.mediator = mediator;
} public Mediator getMediator() {
return mediator;
} public abstract void selectHouse();
} class ZhangSan extends User { public ZhangSan(Mediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
} @Override
public void selectHouse() {
System.out.println("张三在选房子...");
}
} class LiSi extends User { public LiSi(Mediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
} @Override
public void selectHouse() {
System.out.println("李四在选房子...");
}
} /**
* 房屋中介:中介向要找房子的那些人推荐房子,由他们选择自己想要的房子。 *
* 因此中介得持有那些实例。才有可能把房子租出去。
*/
class MyMediator implements Mediator {
private User zhangsan;
private User lisi; public User getZhangsan() {
return zhangsan;
} public User getLisi() {
return lisi;
} @Override
public void createMediator() {
zhangsan = new ZhangSan(this);
lisi = new LiSi(this);
} /**
* 中介向要找房子的那些人推荐房子。由他们选择自己想要的房子
*/
@Override
public void recommendHouse() {
zhangsan.selectHouse();
lisi.selectHouse();
}
} /**
* client測试类
*
* @author Leo
*/
public class Test {
public static void main(String[] args) {
Mediator mediator = new MyMediator();
mediator.createMediator();
mediator.recommendHouse();
}
}
三、总结
中介者模式仅仅需关心和Mediator类的关系,详细类与类之间的关系及调用交给Mediator即可。
Java设计模式菜鸟系列(二十二)中介者模式建模与实现的更多相关文章
- Java设计模式菜鸟系列(一)策略模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39721563 今天開始咱们来谈谈Java设计模式. 这里会结合uml图形来解说,有对uml ...
- Java设计模式菜鸟系列(十七)桥接模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40008711 桥接模式(Bridge): 把事物和其详细实现分开(抽象化与实现化解耦),使 ...
- Java并发编程系列之三十二:丢失的信号
这里的丢失的信号是指线程必须等待一个已经为真的条件,在開始等待之前没有检查等待条件.这样的场景事实上挺好理解,假设一边烧水,一边看电视,那么在水烧开的时候.由于太投入而没有注意到水被烧开. 丢失的信号 ...
- Java设计模式菜鸟系列(十四)代理模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 代理模式(Proxy):代理模式事实上就是多一个代理类出来,替原对象进行一些 ...
- Java设计模式菜鸟系列(十)模板方法模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39806973 模板方法模式(Template Method):在一个方法中定义了一个算法的 ...
- Java设计模式菜鸟系列(十五)建造者模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39863125 建造者模式(Builder):工厂类模式提供的是创建单个类的模式.而建造者模 ...
- 整数转罗马数字 C++实现 java实现 leetcode系列(十二)
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...
- Java设计模式菜鸟系列(两)建模与观察者模式的实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39755577 观察者(Observer)模式定义:在对象之间定义了一对多的依赖关系,这样一 ...
- Java设计模式菜鸟系列(九)外观模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805735 外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一 ...
随机推荐
- 1.2 Use Cases中 Commit Log官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Commit Log 提交日志 Kafka can serve as a kind ...
- Linux字符界面安装图形界面XWindow
https://jingyan.baidu.com/article/219f4bf790f4c7de442d3825.html
- oracle函数大全-字符串处理函数
字符函数——返回字符值 这些函数全都接收的是字符族类型的参数(CHR 除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.字符函数的返回类型所受的限制和基本数据库类 ...
- ejs模板引擎的使用
引入ejs.min.js 创建模板,以<%=jsCode%>包裹起来其余的html和html结构一样 focusTemplateData是模板使用的数据,使用$.each()方法遍历绑定数 ...
- JS错误记录 - 记录上次登陆的用户名
<script> //步骤 1.submit => 用户名存进cookie 2. onload => 从cookie读取用户名 window.onload = function ...
- Vue里父子组间的通讯
父组件代码 <template> <div> <child @child-say="listenToBoy" :mes=count></c ...
- 微信小程序踩坑- tabBar.list[3].selectedIconPath 大小超过 40kb
重新启动微信小程序编辑器的时候遇到了这样的一个问题: tabBar.list[3].selectedIconPath 大小超过 40kb 微信小程序开发的过程之中总会出现这样或者那样的错误,需要我们耐 ...
- 判断Bigdecimal类型是否等于0的方法
1.我之前用来判断Bigdecimal类型是否等于0的方法 b.equals(BigDecimal.ZERO); 用equals方法和BigDecimal.ZERO进行比较. 2.上面方法存在的问题 ...
- C# 进程同步,通信
进程之间通讯的几种方法:常用的方法有:1.使用内存映射文件2.通过共享内存DLL共享内存3.使用SendMessage向另一进程发送WM_COPYDATA消息. 发送WM_COPYDATA消息 比 ...
- [Angular2 Form] Reactive Form, FormBuilder
Import module: import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/comm ...