设计模式 场景模拟 Mediator pattern 中介者模式

 Mediator pattern 中介者模式 是干嘛的呢??什麽时候用到呢??

其实我们在工作中,写程序的时候,常常用到,没啥大惊小怪的。

它的主要的作用就是 操作两个对象。简单的说吧,中介的作用,就是介绍不同的对象的,使得不同的对象能相互形成关系。

职介的作用是撮合找工作的和企业形成雇佣关系,婚介是....就不一一介绍了。

下面我们来举个例子:

张三今天出差到上海,他要住喜来登酒店,住宿的话需要刷银行卡缴纳房费,那么这里的这个缴纳房费我们可以做个场景演示,用中介者模式来实现下。他们的关系如下图。

 

通过上图的实体关系,我们可以用JAVA来实现各个实体的关系。

房客.java

package Mediator; public class 房客{ private 房客银行卡 银联卡 = new 房客银行卡(); public 房客银行卡 拿出银行卡(){ return 银联卡; } }

从上面对象我们可以发现房客有个银联卡噢。

 

房客银行卡.java

package Mediator; public class 房客银行卡{ private static int 账户余额 = 2000; public int 交易(int 交易金额) throws Exception{ if(-交易金额>账户余额) throw new Exception("银行账户金额不足"); 账户余额 = 账户余额 + 交易金额; return 账户余额; } public int 查询余额(){ return 账户余额; } }

 

我们可以看出银行卡是有余额的,这里的卡的交易是要判断余额的。为什么这里的条件判断,交易金额是要加个负号呢。

这里我们可以理解下,如果交易金额是负的,是刷卡消费,那么就要判断余额是否足不足,那怎么办,只能再加个负号了。

如果是存入的,那就不管了。

 

酒店.java

package Mediator; public class 酒店{ private 酒店银行卡 银联卡 = new 酒店银行卡(); public 酒店银行卡 拿出银行卡(){ return 银联卡; } }

 

这里的酒店的银行卡的信息其实已经集成在POS机里面了。

 

酒店银行卡.java

package Mediator; public class 酒店银行卡{ private static int 账户余额 = 2000; public int 交易(int 交易金额){ 账户余额 = 账户余额 + 交易金额; return 账户余额; } public int 查询余额(){ return 账户余额; } }

 

银联.java

package Mediator; public class 银联{ public int 交易(房客银行卡 房客银行卡,酒店银行卡 酒店银行卡,int 住宿费) throws Exception{ int 房客账户余额 = 0; 房客账户余额 = 房客银行卡.交易(-住宿费); 酒店银行卡.交易(住宿费); return 房客账户余额; } }

 

银联提供交易接口。

 

酒店服务员.java

 

package Mediator; public class 酒店服务员{ public static int 刷卡(房客银行卡 房客银行卡,酒店银行卡 酒店银行卡,int 住宿费) throws Exception{ 银联 银联 = new 银联(); return 银联.交易(房客银行卡,酒店银行卡,住宿费); } /** * 这里酒店服务员开始刷POS机器了。 */ public static void main( String[] args ) throws Exception{ 酒店 喜来登 = new 酒店();//酒店信息在POS机器上就有的 房客 张三 = new 房客();// //张三掏出银行卡,喜来登的银行账户信息就在POS机器里面了。这里刷卡3000块,住两天。 int 张三余额 = 刷卡(张三.拿出银行卡(),喜来登.拿出银行卡(),3000); System.out.println(张三余额); } }

 

通过以上的6个对象,把上面的关系图里面的对象全部实现了。

在酒店服务员中,有个main函数,这里就相当于酒店服务员对缴费的处理吧。

 

下面我们看输出:

Exception in thread "main" java.lang.Exception: 银行账户金额不足 at Mediator.房客银行卡.交易(房客银行卡.java:7) at Mediator.银联.交易(银联.java:8) at Mediator.酒店服务员.刷卡(酒店服务员.java:7) at Mediator.酒店服务员.main(酒店服务员.java:16)

 

当然上面的交易是失败的。故意这么做的。

 

大家是否明白了呢,其实如果我们不用中介模式的话,那么这个操作也是可以实现的。只是两个对象的耦合就复杂了。在两个对象之间都会耦合对方的信息。

 

其实我们在平时写程序的过程中这种模式到处都在用,只是不知道叫什么模式罢了,设计模式就是个噱头。程序写的多了,自然用的正确的模式就多了,只是不知道这麽用原来叫做XXX设计模式........

 

作者:keyboardsun 转载请标明出处

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值