相似点
开始的时候,这四个模式在名字上的意思有相似的地方,在实际生活中,如房屋中介、买房人、卖房人,房屋中介当然是一个中介,因为它负责买房人和卖房人之间的沟通;房屋中介也是一个代理,它在卖房人面前是买房人的代理,在卖房人面前时买房人的代理;房屋中介也是一个桥接,用于连接买房人和卖房人;房屋中介也可以是命令的传达者,买房人将买房的命令发送给中介,中介根据命令找到相应的卖房人。那这字面意思相似的四者到底有什么不同的使用场合。
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;