此三者均是对旧的对象进行封装以提供新的行为,实际上都包含了代理的概念,但实际使用时又有所区别:

适配器模式:将A接口的实现封装后表现出了B接口的行为

装饰模式:将A接口的实现封装后仍然表现出A接口的行为,但在行为逻辑上与原来不同

代理模式:将A接口的实现封装后仍然表现出A接口的行为,这一点上与装饰模式相同,所以非常容易混淆;实际上装饰模式确实可以认为是代理模式的一种类型,因为装饰模式的代理目标局限于一个普通的Java对象,而代理模式中代理目标则更自由,远程代理中它是存在于另一台主机上,虚拟代理中则是一个临时的对象等