什么是 外观、代理、适配器 和 装饰者 设计模式的区别?
从通用角度来看,这些模式似乎做的事情相同,即: 封装API并提供访问。
如何区分这些模式?
何时选择某个模式比其他模式更合适?
什么是 外观、代理、适配器 和 装饰者 设计模式的区别?
从通用角度来看,这些模式似乎做的事情相同,即: 封装API并提供访问。
如何区分这些模式?
何时选择某个模式比其他模式更合适?
外观模式(Facade)
例如,您可以使用外观模式使调用API更加容易。在这个“远程外观”示例中,从客户端隐藏了服务器上的代码实现。客户端调用一个API方法,而该方法又可以在服务器上调用1个或多个API。
适配器模式(Adapter)
这里有一个很好的例子,可以在维基百科的这里找到。客户端对象 Source
希望调用另一个对象 Target
上的方法,但另一个对象的接口与客户端期望的不同。
这时候就需要适配器对象。
它可以接收来自 Source
对象的调用,并在幕后调用应该使用的 Target
方法。
Source->CallMethodAOnTarget() ---< Adaptor.CallMethodAOnTarget() this calls ---> Target.MethodWithDifferentSignatureAndName(int i)
至于代理模式,我没有任何经验。