代理通信设计模式 - 代理模式、桥接模式、中介者模式

查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

    

相似点

    开始的时候,这三个模式在名字上的意思有相似的地方,在现实生活中,如房屋中介、买房人、卖房人,房屋中介当然是一个中介,因为它担任买房人和卖房人之间的相同;房屋中介也是一个代理,它在卖房人眼前是买房人的代理,在卖房人眼前时买房人的代理;最后房屋中介也是一个桥接,用于连接买房人和卖房人。那这字面意思相似的三者到底有什么不同的应用场所。

    

    

UML

    

代理和通信 代理和通信 代理和通信
代理模式 中介模式 桥接模式

    

    

    

代理模式

    应用场所

    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;

    

    

桥接模式

    

应用场所

    

当一个类有很多属性时,我们可以通过继承的方法来继承这些属性,但是如果属性不稳准时,继承会形成大量的继承类,所以这个时候应用组合或者聚合更好一些;

    


    

特点

    

1. 一对多的关系,一个类可以有很多其他属性;

    

2. 桥接夸大不是对象之间的通信,而是拥有某些属性;

    


    

区分

    

1. 我们可以看出,中介者模式和代理模式比较相似,他俩夸大的是通信,桥接模式夸大的时候拥有属性;

    

2. 中介者模式是多对多通信,代理是一对一通信,桥接是一对多;

    

3. 代理是通信只能从一方到另外一方,中介者是双向都可以通信;

    


    


文章结束给大家分享下程序员的一些笑话语录: 据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。
硬件工程师说:“我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。”
项目经理说:“根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。”
软件工程说:“咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。”

你可能感兴趣的:(中介者模式)