查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!
开始的时候,这三个模式在名字上的意思有相似的地方,在现实生活中,如房屋中介、买房人、卖房人,房屋中介当然是一个中介,因为它担任买房人和卖房人之间的相同;房屋中介也是一个代理,它在卖房人眼前是买房人的代理,在卖房人眼前时买房人的代理;最后房屋中介也是一个桥接,用于连接买房人和卖房人。那这字面意思相似的三者到底有什么不同的应用场所。
代理模式 | 中介模式 | 桥接模式 |
应用场所
1. 做过Android的都应该知道Android的进程间通信是Binder,Binder的客户端调用服务端都是通过调用服务端在客户端进程的代理进行的,由于客户端没法和服务端直接通信,因为他们在两个进程,所以这个代理其实就通过进程间通信和服务端交互,但是看起来就好像客户端直接和服务端通信一样。
2. 引用计数,C++利用引用计数来管理对象内存的回收,我们在应用这个对象时,都是通过引用计数来操作的,因为我们不知道这个对象现实的地址,这个引用计数就是该对象的代理;所以,上面的UML图不一定是精确的,代理和被代理对象不一定继承于一个基类,它们之间可以没有任何关系;
特点
1. 一对一,这个代理只能代表一个对象;
2. 只能代理一方,也就是 PB 是B的代理,A能够通过PB访问B,但是B不能通过PB访问A;
应用场所
1. Android的Binder的总服务ServiceManager就是一个中介者,它们担任所有的客户端和所有服务之间的通信;
特点
1. 多对多,这些被管理的对象之间都可以通信,它们的业务关系应该是交织在一起的;
2. A能够通过中介访问B,B也能够通过中介访问A;
文章结束给大家分享下程序员的一些笑话语录: 据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。
硬件工程师说:“我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。”
项目经理说:“根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。”
软件工程说:“咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。”